• ベストアンサー

正規表現で無条件にヒットさせたい

正規表現で"『』"に囲まれた文字列を無条件にヒットさせたいです。 今は"『(.+?)』"を使用していますが 『』内に途中で改行が入ってしまうと、ヒットしなくなってしまいます。 例 『あいうえお』では、"『"~"』"まで全てヒットしますが 『あいう えお』では、全てヒットしません。 正規表現はあまり詳しくないので・・・ 回答よろしくお願いします。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

秀丸の正規表現は、改行に関して少し特殊な正規表現です。正規表現の中に実際に 書かれている \n の数にプラス1をした行数以下にしかマッチしません。次の URL の終わりのほうを参照ください。 http://homepage2.nifty.com/jr-kun/hidemaru_qa/4_regulr.html > 実際に使うときは『』の中に何回も改行が入ることがあります。 > とにかく『』の中を無条件にヒットさせるものはないでしょうか? 残念ですが、簡単な正規表現で無条件にヒットさせるのは難しいように思います。 ほかのツールでは 『(.*\n)*?.*?』 の正規表現でマッチさせることができますが、 秀丸では3行以上のブロックにはマッチしません。実用的ではないですが、 『(.*\n)??(.*\n)??(.*\n)??(.*\n)??.*?』のように、必要な分だけ \n を書く以外 にないと思います。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

単純にヒットさせるだけなら 『(.|\n)+?』 でいいかもしれない. ただし 『 』 にもヒットしちゃうことには注意. どうしても『~』の中に (改行以外で) 1文字入れたいなら... 『((.|\n)*?[^』](.|\n)*?』 かなぁ? ちょっとこっちは不明. ちなみに Perl でも m//m か m//s のどちらかでよかったはず>#1.

yue_1995
質問者

補足

試してみましたが、ダメでした。 ありがとうございました。 実際に使うときは『』の中に何回も改行が入ることがあります。 とにかく『』の中を無条件にヒットさせるものはないでしょうか?

回答No.1

改行を取ってやれば #!/usr/local/bin/perl $foo = "『あいう\nえお』"; $foo =~ s/\n//g; $foo =~ m/『(.+?)』/; print $1;

yue_1995
質問者

補足

秀丸エディタで指定した文字列を強調する設定なので 改行を削除したりはできません。 すいません。