将所有内容匹配到精确div中的最后一个确切字符串(php)

时间:2017-03-21 15:24:26

标签: php html regex

我想匹配不动产服务器上的属性的地址。假设包含div的地址名为<div class="title">,地址位于最后<h2>部分,如下所示:

<body>
  <div class="price">
    <h2>
      h2
    </h2>
  </div>      
  <div class="title">
    <abcd>
      abcd
    </abcd>
    <efg>
      efg
    </efg>
    <h2>
      adress
    </h2>
 </div>
</body>

是否有可能通过一个正则表达式捕获地址,即使它将在某个捕获的组中?

我的工作解决方案是:

regex="/<div class="title">everything_except_<h2>*([^<]*)/";

1 个答案:

答案 0 :(得分:1)

试试这个正则表达式:

<div class="title">(?:.(?!<\/div>))*<h2>([^<]*)

这里的要点是在.*贪婪后制作<div class="title">,但只有在找到</div>之后才匹配。因此,正则表达式将.限制为仅</div>不会出现的事件(因此会给我们(?:.(?!<\/div>))*)。

演示:https://regex101.com/r/2EGXue/1

<强>更新

如果可能出现嵌套div,但只能进行一级嵌套,并且所需的<h2>...</h2>不在div的任何一个范围内(如提供的数据样本中所发生的那样) ),贪婪匹配模式(.(?!<\/div>))应该扩展为匹配“not <div ...>...</div>”(即<div.*?<\/div>)或“not </div>”({{1 }}):

.(?!<\/div>)

演示:https://regex101.com/r/IGLhBZ/1