0

私はこのコードを持っています:

 $subject=<<<EOD
<object height="400" width="500"><param name="allowfullscreen" value="false">
<param name="AllowScriptAccess" value="always">
<param name="movie" value="http://embed.rede.com/player/">
<param name="FlashVars" value="id=97219&style=reube&autostart=false">
<embed src="http://embed.rube" allowfullscreen="false" AllowScriptAccess="always"
flashvars="autostart=false" pluginspage="http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash" 
type="application/x-shockwave-flash" height="400" width="500" /></object>
EOD;

PHP正規表現を使用して、ページ上のすべてのオブジェクトタグを取得しようとしています:

    $pattern="/<object(.*)object>/i";
   preg_match_all($pattern, $subject, $matches ,PREG_PATTERN_ORDER);
   echo "<br/><br/><br/><br/><br/><br/><br/><br/>";
   print_r($matches);

しかし、それは何も取得しません。括弧内にあるものには興味がありません..オブジェクトタグ全体を取得したいです。注:スクレイピングはしていません。私の入力は、実際にはいくつかのタグを含む文字列です (ユーザーの投稿です)。問題は、なぜ何も取得しないのですか?!?

アップデート 。

これが解決策だった場所です:

■ (PCRE_DOTALL) この修飾子が設定されている場合、パターン内のドット メタ文字は、改行を含むすべての文字と一致します。それがない場合、改行は除外されます。この修飾子は、Perl の /s 修飾子と同等です。[^a] などの否定的なクラスは、この修飾子の設定に関係なく、常に改行文字に一致します。

4

2 に答える 2

3

最初のタグが読み取られないというのは正しいです。また、正規表現が複数行であることを示していない可能性もあります。そのため、最初の行で停止し、先に進みません (デフォルトの IIRC ではドットはすべて 1 行です)。

"/<object.*?>(.+?)<\/object>/is"
于 2012-06-20T10:43:18.190 に答える
1

このタグに一致するより良い正規表現は次のとおりです。

'~<object[^>]*>(.+)</object>~ismU'

于 2012-06-20T11:43:26.840 に答える