- 締切済み
正規表現で・・・
正規表現で文字列の検索をしたいのですが、 いまいちわかりづらくて困ってます。 Message:What if the nuclear techonology wich has been developed by the human race should end up in ruining ourselves?/E/ というような文字列をMessage:をキーにして /E/までを検索したいのです。当然 行間には改行コード 入ります。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- you-m
- ベストアンサー率58% (190/327)
とりあえず、PHP4以降であればつかえると思いますが、参照URLに記載されている関数を使えば、マルチラインモードが使えるようです。 単にマッチした部分を引っ張りたいのなら、mbereg_searchや、mbereg_search_pos辺りになるでしょうか。 '.'が、改行に対してマッチするようになるので、 Message:.*/E/ という表現で、質問の文字列にマッチします。 ただし、この表現だと ##--------------- Message:hogehoge hagehage higehige/E/ Message:hugehuge hegehege hogehoge/E/ ##--------------- という文字列に適用した場合、最初のMessage:から最後の/E/までマッチしてしまうので、もう一工夫必要ですけどね。
- you-m
- ベストアンサー率58% (190/327)
改行の扱いについては、正規表現一般というよりも、処理系によって、まちまちなので、汎用的なパターン表記は、ほぼ不可能だと思います。 具体的に、どんなツールを使って、どんな前提でマッチさせたいのかの説明があれば、より具体的な回答ができる人は結構いると思います。 また、一般的には、こういったケースに対して、正規表現のみで解決するよりも、処理系が持つ制御構造と組み合わせて解決する方が、よりスマートな構造になる事も、合わせて付け加えておきます。
補足
上記の文意外にも色々と含まれています。 例えば・・・ Address:aaaaaaaaaaaaaa/E/ Name:yyyyyyyyyyyyyyyyy/E/ といった感じです。 丁度、メールの本文と同じような物です。 その本文の中から特定の文字列をPHPで抜き出したいのです。 Addressの場合はAddress:以降から/E/までの文字列 Messageの場合はMessage:以降から/E/までの文字列(改行コード含む)
お礼
有難う御座いました。 試行錯誤の上何とか出来ました。