2012-06-20 118 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'