[英]Regex to match 2 html tags in 1 HTML file
我有一個HTML文件,其中包含以下內容:
<img src="MATCH1" bla="blabla">
<something:else bla="blabla" bla="bla"><something:else2 something="something">
<something image="MATCH2" bla="abc">
現在我需要一個正則表達式匹配MATCH1和MATCH2
此外,HTML包含多個這樣的部分,因此它可以在HTML的1,2,3中x次。
當我說:
<img\s*src="(.*?)".*?<something\s*image="(.*?)"
它與它不匹配。 我在這里錯過了什么?
提前致謝!
我認為你應該使用HTML DOM Parser
例如:
// Create DOM from URL or file
$html = file_get_html('http://www.example.com/');
// OR Create a DOM object from a HTML file
$html = file_get_html('test.htm');
// Find all images
foreach($html->find('img') as $element)
echo $element->src . '<br>';
// Find all links
foreach($html->find('a') as $element)
echo $element->href . '<br>';
有過濾器可以獲取具有特定屬性的標記:
[attribute]匹配具有指定屬性的元素。
[attribute = value]匹配具有指定屬性且具有特定值的元素。
[attribute!= value]匹配沒有指定屬性且具有特定值的元素。
[attribute ^ = value]匹配具有指定屬性的元素,並以特定值開頭。
[attribute $ = value]匹配具有指定屬性的元素,並以特定值結束。
[attribute * = value]匹配具有指定屬性且包含特定值的元素。
還有一些其他解析工具來解析HTML,如本答案中所述 。
嗯,在更多的反正則表演者出現之前,我會更好地闡述。 在您的情況下,它實際上適用於使用正則表達式。 但是我想指出,你應該仔細評估利弊 。
使用phpQuery或QueryPath進行此類任務大多簡單:
qp($html)->find("img")->attr("src");
但是,如果你不忽視細節,那么正則表達式也是可能的:
preg_match('#<img[^>]+src="([^">]*)".+?<something\s[^>]*image="([^">]*)"#ims', $html, $m);
如果提取取決於兩個標簽的存在,那么它可能是更好的選擇。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.