正则表达式匹配1个HTML文件中的2个html标签

Cyb*_*erK 3 html php regex html-parsing

我有一个HTML文件,其中包含以下内容:

<img src="MATCH1" bla="blabla">
<something:else bla="blabla" bla="bla"><something:else2 something="something">
<something image="MATCH2" bla="abc">
Run Code Online (Sandbox Code Playgroud)

现在我需要一个正则表达式匹配MATCH1和MATCH2

此外,HTML包含多个这样的部分,因此它可以在HTML的1,2,3中x次.

当我说:

<img\s*src="(.*?)".*?<something\s*image="(.*?)"
Run Code Online (Sandbox Code Playgroud)

它与它不匹配.我在这里错过了什么?

提前致谢!

Nav*_*eed 10

在解析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>';
Run Code Online (Sandbox Code Playgroud)

有过滤器可以获取具有特定属性的标记:

[attribute]匹配具有指定属性的元素.

[attribute = value]匹配具有指定属性且具有特定值的元素.

[attribute!= value]匹配没有指定属性且具有特定值的元素.

[attribute ^ = value]匹配具有指定属性的元素,并以特定值开头.

[attribute $ = value]匹配具有指定属性的元素,并以特定值结束.

[attribute*= value]匹配具有指定属性且包含特定值的元素.

更多的选择


还有一些其他解析工具来解析HTML,如本答案中所述.

  • 这绝对是最简单的方法.我曾经用正则表达式解析html,但它带来的头痛绝对不值得!听取建议并使用适当的html解析器 (2认同)