在PHP中替换字符串

时间:2014-12-27 10:00:40

标签: php regex

考虑以下输入HTML:

<div class='content'>
    <img style='border-style: solid; border-width: 1px;' src='/media/uploads/defaults/181'/><br/><br/>
    <div class='imgCaption'>
        Reverse Osmosis Caption
    </div>
</div>
<pagebreak/>
<h3>Access </h3>
<h4>Type</h4>
<div class='content'>
    Your plumbing system is accessible with a Main Shut off Valves
</div>
<h4>Location</h4>
<pagebreak/>
<h3>Operation & maintenance #1</h3>
<div class='content'>
    All wastewater treatment systems and their components require regular maintenance.
</div>
<h4>Activity</h4>

所以我需要找到所有未被类&#34;内容&#34;的div所遵循的h4标题。 (在这个例子中,它是&#34; h4活动/ h4&#34;在最底层)。

我的正则表达式

/<h4>.*<\/h4>(?!<div class='content'>)/

后捕获所有内容
<h4>Type</h4>

这是有道理的,因为它不仅仅是&#34; div class =&#39; content&#39;&#34;。

所以我的问题是我如何重新编写查询,因此它只会选择不包含类内容div的标题。

1 个答案:

答案 0 :(得分:0)

您需要在negative lookahead assertion内的第一个.*?添加.*?。如果您未能添加<div class='content'>,则否定前瞻会检查<h4>(?:(?!<\/?h4>).)*?<\/h4>(?!.*?<div class='content'>) 代码的紧随其后。

h4

DEMO

它会与最后一个<div class='content'>代码匹配,因为它后面没有任何{{1}}代码。