• ベストアンサー

秀丸で、正規表現キャプチャを利用して、置換をしたい

':hoge' => $ ':piyo' => $ ':puur' => $ を ':hoge' => $hoge, ':piyo' => $piyo, ':puur' => $puur, へ置換したいのですが、うまくいきません。 どう書けば良いでしょうか? ■試したこと ・検索':\(.*?\)' => $ ・置換':\1' => $\1, ※「':」と「'」の最短マッチを「\(.*?\)」でキャプチャしようしたのですが、ノーリアクションでした

  • re999
  • お礼率61% (476/777)

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

■「 \c 」の意味について [a-zA-Z_0-9] と同じ意味で、一般的には「\w」ですが秀丸では「\c」と書くことになっています。 ■「 ':([^']+)' 」の意味について > 「':」と「'」の間にある「'」ではない文字の連続を取得、ということになるのでしょうか? その通りです! ここで括弧を使っているのは、括弧内の正規表現にマッチする文字列を、置換先の文字列の一部として使うためです。 「':hoge' => $」だと「hoge」がマッチし、置換の「\1」の部分が「hoge」になります。 質問文にある、試した検索指定の正規表現では、括弧記号をエスケープしてしまっていたところにも誤りがありました。 > 「 ':[^*]+' 」や「 ':[^@]+' 」でもいい、という理解で合っているでしょうか? 括弧が必要だということを除けば、、、 マッチさせたい文字列がどういう規則で成り立っているのか、によります。 私は例として「'」ではない文字の連続という規則で書きましたが、任意の文字の連続ということでいいのなら、「':(.+)' => \$」で十分です。

re999
質問者

お礼

回答ありがとうございました。 大変、参考になりましたー!

その他の回答 (1)

回答No.1

ドル記号$をエスケープしていない等の誤りがあるからですね。 ・検索  ':(\c+)' => \$ ・置換  ':\1' => \$\1, これで試してください。 あるいは、「検索」のほうはこうしてもいいです。 ':([^']+)' => \$

re999
質問者

補足

回答ありがとうございます。 おかげで望む結果が得られたのですが、参考までに教えてください。 ■一つ目 「 \c 」はどういう意味なのでしょうか? ■二つ目 「 ':([^']+)' 」の意味は、 「':」と「'」の間にある「'」ではない文字の連続を取得、ということになるのでしょうか? もしそうなら、この場合の「'」に特に意味はなく、 例えば、「 ':[^*]+' 」や「 ':[^@]+' 」でもいい、という理解で合っているでしょうか?

関連するQ&A

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • 秀丸エディタの正規表現

    秀丸エディタの正規表現の機能を使って、次のような置換を考えています。 変更前 <A>hoge hoge PINEAPPLE hoge hoge PINEAPPLE hoge hoge</A> <B>hoge hoge PINEAPPLE hoge hoge PINEAPPLE hoge hoge</B> 変更後 <A>hoge hoge PINEAPPLE hoge hoge PINEAPPLE hoge hoge</A> <B>hoge hoge パイナップル hoge hoge パイナップル hoge hoge</B> 以下のようなものを試してもできませんでした。 検索 ^(<B>.*?)PINEAPPLE 置換 \1パイナップル このような変更を一度の置換で実現する正規表現はありますでしょうか。

  • 秀丸での、正規表現を使った置換

    秀丸での、正規表現を使った置換 \t第*.条*. (例えば「第1条」「第2条」「第3条」など) にマッチするものを、 \n第*.条*.\n のフォーマットに変換したいです。 しかし、変更後を「\n第*.条*.\n」でしていすると、 置換後の文字自体が、アスタリスクになってしまい、 例えば「第1条」「第2条」「第3条」などが、 すべて「第*.条」「第*.条」「第*.条」などになってしまいます。 数字部分を残しつつ置換するにはどうすればよいでしょうか?

  • 秀丸で正規表現を使って置換

    あるファイルに関して、このような置換を行いたいです。 abc/xxx,yyy,zzz.html ↓ abc/xxx.html xxxとyyyとzzzはある任意の文字列(英数字で文字数はばらばら)で 「abc/」と「,」と「.html」は固定の文字列になります。 そこで、秀丸で開いて、正規表現による検索で、 「abc/.*,.*,.*.html」 として検索すると、該当部分が検索できることがわかりましたが、置換後をどのように設定すればいいのかわかりません。 置換後のabc/xxx.htmlの「xxx.html」の部分は検索前の任意の文字列をそのまま残したいのです。 秀丸の置換機能でこのようなことは可能でしょうか? 正規表現に関してあまり詳しくないので教えてください。

  • (秀丸)正規表現で、""をマッチさせるには?

    お世話になります。 以下2行に、それぞれマッチさせて、 末尾の""(ダブルコーティション)を外して置換えしたいです。 1-234,漢字,ABC,123円,"789" 1-234,漢字,ABC,"1,234円","789" 秀丸の正規表現 検索  ^(([^,]?)*),(([^,]?)*),(([^,]?)*),(([^,]?)*),"((.?)*)"$ 置換  \1,\2,\3,\4,\5 で試したところ、 1-234,漢字,ABC,123円,"789" では、マッチして、 1-234,漢字,ABC,123円,789 と置換されて結果OKでした。 しかし、 1-234,漢字,ABC,"1,234円","789" の方ではマッチしませんでした。 そこで質問させていただきますが、 1-234,漢字,ABC,"1,234円","789" でマッチするようにする為には、 上記しました秀丸の正規表現(検索)を、 どのように変更すればよろしかったでしょうか? 以上になります。 宜しくお願いいたします。

  • 秀丸の正規表現を使って置換

    三番目の引数が0かNULL、nullならば、以下のように秀丸で置換したいのですが、やり方がわかりません。正規表現を使って置換したいです。 abcmethod(aaa, bbb, 0, ccc)やabcmethod(aaa, bbb, null, ccc)    ↓↓↓↓↓↓ abcmethod(aaa, bbb, ccc) aaa,bbb,cccは任意の文字半角アルファベットや数値です。 abcmethod(.+,.+,.+,.+)で、検索できますが、置換の仕方がわかりません。 どうぞよろしくお願いします。

  • 秀丸での正規表現での置換方法

    お世話になります。 「\(1)\(2)\(3)\(4)\(5)」と言う文字があります。 置換して 「\(1)\(2)\Y\(3)\(4)\(5)」 にしたいのですが、 検索:「\\(.+)\\(.+)\\(.+)」 置換:「\\\1\\\2\\Y\\\3」 とすると 「\(1)\(2)\(3)\(4)\Y\(5)」 となって、(2)の後ろに入ってくれません。 どのようにすれば(2)の後ろ(2個目のエンマークの後ろ)に 置換することができるのでしょうか? 何卒よろしくお願い致します。

  • 秀丸での正規表現を使用した置換

    いつもお世話になっております。 秀丸で正規表現を使用した置換処理を行いたいと思うのですが、どうしても正規表現の式が書けません。 どうかご教示下さい。 <置換前> ABC1 あAbCd++ ... ... ・先頭4文字は半角英数字の大文字固定 ・その後ろにタブ ・最後にかな、英数字、記号などの可変長の文字列 上記で1レコードです。 <置換後> ABC1 String 内容 あAbCd++ ... ... ・先頭4文字そのまま ・その後ろにタブを3つ+改行 ・続いて「内容」という文字列+改行 ・最後に可変長の文字列をそのまま+改行 「置換」の正規表現は以下だと思うのですが、英数字4文字と可変長文字列を別々にマッチさせる「検索」がどうしても分かりません。 \0 String\n内容\n\1\n どうかご教示下さい。 <環境> Ver.6.1.4

  • Perlで可変長の先読み戻り読みができない

    Perlスクリプトで、以下のような置換をしようとしています。 置換前 piyo … fuga … piyo 【piyo … fuga … piyo … hoge … piyo】 fuga … piyo 置換後 【ぴよ】 … fuga … 【ぴよ】 【piyo … fuga … piyo … hoge … piyo】 fuga … 【ぴよ】 【】が入れ子にならないように、【】の外の部分でだけマッチ、置換しようと正規表現を考えていたのですが、いくらやってもできません。調べていたら、Perlでは可変長の先読み戻り読みをサポートしていないらしいことがわかりました。 正規表現一つでも、複数行のスクリプトでも構いません。どのようにすればよいでしょうか。

  • PHP fgetcsv 置換

    失礼します。 例えば要素 $hoge $piyo $temp まで要素があるとして 現在fgetcsvで読み込んだデータを $data[0]を$hogeに置換 $data[1]を$piyoに置換 $data[2]を$tempに置換といったことをやりたいです。 現在 $hoge = 1; $piyo = 2; $temp = 3; $old_fp = fopen($C_result_path, 'r'); //csvを1行をカンマ区切りで読み込む while (($old_data = fgetcsv($old_fp)) !== FALSE) { } fclose($old_fp); } この$old_dataに対して置換していきたいです。 ご教授よろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう