2011-09-24 40 views
0
$HTML = ' 

<div class="tsts">CONTENT GOES HERE 1ENDENDENDENDEND<div class="tsts">CONTENT GOES HERE 2ENDENDENDENDEND <div class="tsts">CONTENT GOES HERE 3ENDENDENDENDEND 
<div class="tsts">CONTENT GOES HERE 4ENDENDENDENDEND 

'; 

preg_match_all('%<div class="tsts">([\S\s]+)ENDENDENDENDEND%',$HTML,$matches); 

我希望它找到「CONTENT GOES HERE 1」,「內容GOES HERE 2」,「CONTENT GOES HERE 3「,」內容在這裏4「在比賽找到所有的字符,直到它找到給出一個字符串的第一次出現,然後不斷的讀取與preg_match_all其餘

順便說一句,我必須使用\ s \ S因爲我需要匹配所有類型的字符,包括特殊字符,新行,標籤,但我希望它停止當它找到ENDENDENDENDEND並獲得其他結果

我該怎麼做?因爲它只停留在ENDENDENDENDEND的最後一次發生,並且我希望它停在第一個發現的地方。所以它可以匹配其餘的。

我該怎麼做?我嘗試了這麼多,沒有什麼= X。 非常感謝。

回答

0

我沒有php環境,但是關鍵是快遞不是嗎?看grep測試:

kent$ echo "' 

<div class="tsts">CONTENT GOES HERE 1ENDENDENDENDEND<div class="tsts">CONTENT GOES HERE 2ENDENDENDENDEND <div class="tsts">CONTENT GOES HERE 3ENDENDENDENDEND 
<div class="tsts">CONTENT GOES HERE 4ENDENDENDENDEND 

'; 

"|grep -Po "(?<=<div class="tsts">)([\s\S]*?)(?=ENDENDENDENDEND)"  

CONTENT GOES HERE 1 
CONTENT GOES HERE 2 
CONTENT GOES HERE 3 
CONTENT GOES HERE 4 
+0

這就是我所需要的。 :)我必須記得使用lookahead,謝謝。 – Grego

0

不,您不必爲此使用\s\S。量詞可能是第二個問題。

正常的.*?會這樣做,如果你不記得/s的標誌。
在你的情況下,[^<>]*?可能會更好,因爲你不想匹配標籤分隔符。

相關問題