簡體   English   中英

正則表達式匹配1個HTML文件中的2個html標簽

[英]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時,Regex並不總能提供完美的結果。

我認為你應該使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM