• ベストアンサー
  • 困ってます

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

  • 質問No.3231677
  • 閲覧数131
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 66% (482/721)

~ 省略 ~
==abc==
! ああ
!: あいうえお

! いい
!: いうえおあ

==def==
~ 省略 ~

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

どういう正規表現をすれば上記全ての文字列を取得する事が出来るのでしょうか?

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

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

ベストアンサー率 62% (800/1280)

通常、'.' を指定してもそれには改行は含まれません。
ですので取得できている部分が改行で途切れているように見えるのです。

これはフラグを指定して、改行も'.'にマッチするように
してやればよいです。

<?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

お礼率 66% (482/721)

できましたあああ。ありがとうございます!
投稿日時:2007/08/08 00:31

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 0% (0/1)

こんなんでどうでしょ。

$a="~ 省略 ~
==abc==
! ああ
!: あいうえお

! いい
!: いうえおあ

==def==
~ 省略 ~";

preg_match("/==abc==.*==def==/s",$a,$b);

print $b[0];
お礼コメント
naktak

お礼率 66% (482/721)

ありがとうございます。無事できました^^
投稿日時:2007/08/08 00:33
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ