• ベストアンサー

複数行をヒットさせる正規表現

~ 省略 ~ ==abc== ! ああ !: あいうえお ! いい !: いうえおあ ==def== ~ 省略 ~ とあった時、==abc==から==def==の間を全て取得したいのですが、 どうにも改行文字の所で止まってしまい、==abc==までしか 取得する事が出来ません。 ~ 省略 ~部分は全く同じ形式で文字列が大量にありますが、 ==abc==、==def==は1箇所にしか存在しません。 どういう正規表現をすれば上記全ての文字列を取得する事が出来るのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

通常、'.' を指定してもそれには改行は含まれません。 ですので取得できている部分が改行で途切れているように見えるのです。 これはフラグを指定して、改行も'.'にマッチするように してやればよいです。 <?php $str = <<< EOS gomi at preface ===abc=== ! ああ !: あいうえお ! いい !: いうえおあ ===def=== gomi at trailer EOS; $ary0 = array(); $pat0 = '==abc==.*==def==='; mb_regex_set_options('m'); mb_ereg($pat0, $str, $ary0); var_dump($ary0); echo "#####\n"; $ary1 = array(); $pat1 = '/===abc===.*===def===/us'; preg_match($pat1, $str, $ary1); var_dump($ary1); こんな感じで。

naktak
質問者

お礼

できましたあああ。ありがとうございます!

その他の回答 (1)

回答No.2

こんなんでどうでしょ。 $a="~ 省略 ~ ==abc== ! ああ !: あいうえお ! いい !: いうえおあ ==def== ~ 省略 ~"; preg_match("/==abc==.*==def==/s",$a,$b); print $b[0];

naktak
質問者

お礼

ありがとうございます。無事できました^^

関連するQ&A

  • 「マッチしない」正規表現の書き方

    正規表現について、おたずねします。 文字列 abc,def,ghi のいずれかにマッチする正規表現は (abc|def|ghi) ですよね。 それでは、「abc,def,ghi のいずれにもマッチしない」正規表現は、どう書けばいいのでしょうか? あちこち調べましたが、どうしてもわかりません。 ただし、if $a =~ /(abc|def|ghi)/ などで、=~ を !~ に直す、というのはナシです。あくまでも右辺の式の中で表現したいのですが…

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

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

  • phpの正規表現

    phpの正規表現で困っています。 下記のような文で括弧で囲まれた文字列だけを消したいのですが、 (ABC)あいうえお(DEF) /(.*)/で置換すると文章が全部消えてしまいます。 「あいうえお」だけを残したいのですがうまくいきません。何方か教えてください。お願いします!

    • ベストアンサー
    • PHP
  • 文字列を含まないという正規表現は?

    お世話になります。 例えば、文字「a」を含まないという正規表現は、 "[^a]" となりますが、文字列「abc」を含まないという正規表現はどうなりますでしょうか? "[^abc]" ではだめでしたし、 "[^(abc)]" でもだめでした。 また、改行などの制御文字を含めたどんな文字でもいいという正規表現はどうなりますでしょうか? ".*" では改行などが含まれるときはだめでした。 どうかご教授のほどよろしくお願い致します。 次のサイトは参考にしたサイトです。 正規表現の解説 目次 http://www4.ocn.ne.jp/~kaerume/k2e/regex_top.html#mnu_top

  • 正規表現についての質問です

    たとえば abc="5565" def="546434" abc="4523" def="459473" abc="3454" def="796812" というようなabcとdefの値を表す文字列があります。 サクラエディタを使い、これらの中から abc="任意の数字"という文字列をを全て選択したいのですが、 なかなかうまくいきません。 どなたかやり方を知っておられましたら教えていただけませんか。 宜しくお願いします><

  • 秀丸エディタでの改行を含む複数行の置換について

    abc↓ 1行の文字列またはランダムな個数の改行を含むランダムな長さの英文文字列 def↓ を abc↓ あ↓ def↓ に置換したい場合、検索文字列はどのように指定すればいいのでしょうか? 「1行の文字列またはランダムな個数の改行を含むランダムな長さの英文文字列」は、 ee ff gg↓ の場合もあれば、 ee ff gg↓ hh iii jj↓ kk.↓ のような場合もありますが、これらすべてを全角1文字に置換したいのです。 また、この abc↓ 1行の文字列またはランダムな個数の改行を含むランダムな長さの英文文字列 def↓ は、他の文章の中に大量に埋まっていて、他の文章の体裁は崩せないため、 一括でとりあえずずべての改行を削除という方法は使えません。 お手数ですがどうぞよろしくお願い致します。

  • Rubyにおける正規表現(一致しない)

    Rubyを使って、テキスト処理をやっています。 どうしても、うまく行かないところがあります。 サジェスチョンをお願いします。 正規表現にて、 2つの条件フラグが成立していて、かつ、特定の文字列を含まないという条件です。 1行の内容は、textに入っています。 if (myFlag1==1) && (myFlag2==1) && (!/abc def/) then xxxxxxxx end (!/abc def/)は、perlでの表現です。Rubyでは、少なくとも (!/abc def/=~text) かな、と考えましたが、ダメでした。 (/abc def/!=text) でも、だめでした。 宜しくお願いいたします。

  • 正規表現を使って置き換え

    以下のような文字列をテキストファイルから消去したいのですが、正規表現を使って可能でしょうか? 秀丸を使っていますが、その方法があれば教えてください。省略のところの文字列は異なりますし、改行の数も違います。 --[PR]------------------------------------------------------------------ ■■■■本場!■■■■送料無料キャンペーン!!■■■ ――省略―― ------------------------------------------------------------------[PR]--

  • 正規表現で

    正規表現で、英大文字と記号だけからなる文字列、を表すにはどうすればよいでしょうか。言い方を変えると、とにかく英小文字は含まないという事なんですが… [^a-z]+ かなと思ったのですがダメでした。 123#ABC : OK 123#aBC : NG みたいな感じです。 よろしくお願いします。

  • (秀丸)正規表現で、特定文字列含む<~>範囲を選択

    お世話になります。 (秀丸の)正規表現について教えてください。 たとえば、テキストファイルに、1行、 ”<abc>文字列1です><abc>文字列2です><abc>文字列3です>(ここで改行)” という文字列が存在しています。 それを対象として、 (秀丸の)正規表現を利用し、 ”<abc>文字列2です>”だけをマッチさせたいのですが、 試しに、(秀丸の)正規表現で、 <abc.*文字列2.*?>  ←(なお、実際の記号は半角(.*?等)で、それぞれ入力しています・・・) で検索実行したところ、 ”<abc>文字列1です><abc>文字列2です>” として、 前の方に、マッチして欲しくない、 ”<abc>文字列1です>” までがマッチしてしまっている状況です。 そこでご質問なのですが、 上記におきまして、(秀丸の)正規表現を利用して、 ”<abc>文字列2です>”だけをマッチさせるには、 どのようにすれば、よろしかったでしょうか? (ちなみに秀丸は、2013年12月10日(火)現在の  最新バージョンVer8.32を利用しています) 以上になります。 宜しくお願いいたします。