2013-04-08 62 views
0

我有一段HTML的(不是完整的HTML文件)具有以下幾個實例:如何在php中使用正則表達式匹配兩個結束標記?

</div> 




      some text is here 

    </h3> 

我想只匹配「一些文本是在這裏」,但我有麻煩用php正則表達式理解多行,換行符和空格。我得到的是:

preg_match('/<\/div>[\s\r\n\t]*(.*)[\s\n\r\t]*<\/h3>/', $string, $matches); 

但這似乎並不奏效。我嘗試使用DOMDocument(),但它會拋出各種錯誤,可能是因爲這不是一個完整的HTML文檔。

任何想法??

+0

使用HTML解析器。你說DOMDocument()是「拋出各種各樣的錯誤」,所以我建議你刪除這個問題併發佈一個新的DOMDocument()與錯誤的問題,讓我們來解決這個問題。與其幫助你使用錯誤的工具來完成這項工作,不如幫助你使用正確的工具。 – 2013-04-08 03:16:14

+0

它不起作用?它似乎爲我工作得很好。你檢查過「$匹配[1]」嗎? – 2013-04-08 05:26:20

+0

@AndyLester我可能會被誤認爲是錯誤的,但正如我在文章中所說的,這不是一個完整的HTML文檔,它甚至還有額外的數據,它不是HTML。如果我實際上可以使用DOMDoc,我會對看到你的示例代碼感興趣,但我已經花了很多時間,並且認爲我只是走簡單的路線。唉,ExplosionPills的答案完全符合我的需求。 – zoltar 2013-04-08 17:06:12

回答

1

使用類似

preg_match("@</div>(.*?)</h3>@s", $html, $matches); 

s PCRE修飾符(最後@後)允許.匹配換行符。 .*?完成後,它只會匹配到第一個</h3>而不是最後一個。標籤之間的數據將在$matches[1]

+0

這個作品,謝謝! (必須切換到preg_match_all) – zoltar 2013-04-08 02:57:45

相關問題