2012-10-21 162 views
0

欲從包含HTML內容中,(<a><span>標記)的第一次出現之間的文本字符串中提取。正則表達式模式匹配

我的模式是如下:

$pattern='/<a[^(span)][\/\(\)-:@!%*>#=_|?$&";.\w\s]+<\/a> <span/um'; 

我得到的輸出爲<a月1日發生的<span末次出現和兩個第一次發生之間沒有文本之間的文本。

例如,HTML內容:

<a href="#">asdasdasd</a> <span blah blah></span> blah blah <a>blah </a> <span>blah 

旺旺:

<a href="#">asdasdasd</a> <span 

獲取:

<a href="#">asdasdasd</a> <span blah blah></span> blah blah <a>blah </a> <span 
+0

我知道這不會回答你的問題,我會建議不要使用正則表達式解析HTML。爲什麼不嘗試這樣的事情[DOM解析器(http://simplehtmldom.sourceforge.net/),並節省一些時間。 – noel

+0

使用合適解析器。 –

+0

知道DOM解析器,但使用正則表達式的原因必須在分配。學習正則表達式。 –

回答

1
  1. 使用HTML解析器解析HTML
  2. 使用懶惰量詞'/<a[^(span)][\/\(\)-:@!%*>#=_|?$&";.\w\s]+?<\/a> <span/um';
+0

感謝哥們.. !!幫助... !!新的正則表達式 –

0

你需要做的正則表達式懶惰,而不是貪婪告訴它與.+?<a<span儘可能之間儘可能少的字符匹配:

$ptn = '/<a.+?<span/'; 
$str = '<a href="#">asdasdasd</a> <span blah blah></span> blah blah <a>blah </a> <span>blah'; 
preg_match($ptn, $str, $matches); 
echo $matches[0]; 

結果是<a href=\"#\">asdasdasd</a> <span

+0

謝謝哥們.. !!幫助... !!新的正則表達式 –