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 regex 获取页面上的所有对象标签:

    $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);

但它什么也没得到。我对括号内的内容不感兴趣..我想获得整个对象标签。注意:我不是在刮。我的输入实际上是一个带有几个标签的字符串(它是用户发布的)。问题是为什么它没有检索到我任何东西?!?

更新 。

这就是解决方案的所在:

s (PCRE_DOTALL) 如果设置了此修饰符,则模式中的点元字符匹配所有字符,包括换行符。没有它,换行符被排除在外。这个修饰符等价于 Perl 的 /s 修饰符。诸如 [^a] 之类的否定类始终匹配换行符,与此修饰符的设置无关。

4

2 回答 2

3

danneth 是正确的,您的初始标签不会被读取。您也有可能没有指出您的正则表达式是多行的,这就是为什么它会在第一行停止而不继续(默认情况下,点都是单行 IIRC)。

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

匹配此标签的更好的正则表达式是:

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

于 2012-06-20T11:43:26.840 回答