使用regex preg_match查找开始锚标记和抓取类属性

时间:2013-07-12 17:12:45

标签: php regex class preg-match anchor

我只是想做的是采用以下代码:

$Anchors = '<a href="#" class="test1"><div class="test2"><a href="#" class="test3"><div class="test4">'

获取最后一个锚标记的class属性的值,在本例中为“test3”。到目前为止,我有这个:

if(preg_match('/(<a\s.*)(class="|\')([^-\'"]*)("|\')?.*?([^>])/i',$Anchors,$matches)){

但显然它没有做我想做的事,有什么帮助吗?

2 个答案:

答案 0 :(得分:2)

描述

这个正则表达式将:

  • 匹配字符串中的最后一个锚标记
  • 捕获类属性的值
  • 避免在搜索html字符串时使用正则表达式的许多潜在问题

.*<a\b(?=\s) # capture the open tag
(?=(?:[^>=]|='[^']*'|="[^"]*"|=[^'"][^\s>]*)*?\sclass=['"]([^"]*)['"]?)  # capture the src attribute value
(?:[^>=]|='[^']*'|="[^"]*"|=[^'"\s]*)*"\s?\/?> # get the entire  tag

enter image description here

实施例

此处的实例:http://www.rubular.com/r/G5F6AD5UyL

示例文字

请注意,最后一个标签有一个困难的边缘情况

<a href="#" class="test1"><div class="test2">
<a onmouseover=' class="NotTheClass" ; funClassRotator(class) ; ' class="test3" href="#" ><div class="test4">

捕获论坛

[0][0] = <a href="#" class="test1"><div class="test2"><a href="#" onmouseover=' class="NotTheClass" ; funClassRotator(class) ; ' class="test3">
[0][1] = test3

答案 1 :(得分:1)

使用ganonsimplehtmldom

会更快

例如使用simplehtmldom

foreach($html->find('a') as $element)
   echo $element->class . '<br>';