2012-06-20 56 views
0
在标签上工作

我有这样的代码:正则表达式失败,PHP

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

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

UPDATE。

在这里将溶液:

S(PCRE_DOTALL) 如果设定了此修正,在模式中的圆点元字符的所有字符,包括换行匹配。没有它,换行符被排除在外。这个修饰符相当于Perl的/ s修饰符。否定类如[^ a]总是匹配换行符,与此修饰符的设置无关。

+1

快速猜测......因为'/ /'不匹配'<物体高度...'或许像'/ /'? – danneth

+0

我也试过..它没有工作 –

+1

'echo“









”;',真的吗? – Jeroen

回答

3

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

"/<object.*?>(.+?)<\/object>/is" 
+0

+1行返回肯定是问题 – Ben

+0

参考文档:http://au.php.net/manual/en/reference.pcre.pattern.modifiers.php – Ben

+0

嗯..非常好.. –

1

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

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