PHP preg_replace不匹配多个空格

时间:2014-07-17 07:58:48

标签: php regex preg-replace

所以,

我有一些遗留的HTML我尝试使用正则表达式来删除。像

这样的东西
<div class="al-list-head"><span>Another List</span></p>
<h3>Destinations</h3>
</div>

HTML中的另一个变体可能是

<div class="al-list-head">
<p><span>Another List</span></p>
<h3>Lounge</h3>
</div>

(CMS有时会添加冗余<p>

我的正则表达式大部分(第二个样本)但不是第一个。我尝试了很多字符类,但似乎无法匹配第一个样本中最后</h3>和最后</div>之间的差距。

我的正则表达式是......

$html = preg_replace( '/<div class=\"al-list-head\">[\s](<p>?)(<span>Another\ List<\/span>)(<\/p>?)[\s]<h3>([^<\/>]*)<\/h3>[\s]<\/div>/is', '<h3 class="al-head">$4</h3>', $html );

<\h3>我尝试[\s]([\s]?)([\s\b\n\r]*)甚至是(.*)之后,我没有运气。

任何指针?

我使用此handy little tool进行迭代和测试,希望有人发现它也很有用。

2 个答案:

答案 0 :(得分:1)

使用\s*

$html = preg_replace( '/<div class=\"al-list-head\">\s*(<p>?)(<span>Another\ List<\/span>)(<\/p>?)\s*<h3>([^<\/>]*)<\/h3>\s*<\/div>/is', '<h3 class="al-head">$4</h3>', $html );

答案 1 :(得分:0)

你可以试试下面的正则表达式,它可以适用于两个例子,

/<div\s*class=\"al-list-head\">\s*(<p>)?(<span>Another\s*List<\/span>)(<\/p>)?\s*<h3>([^<\/>]*)<\/h3>\s<\/div>/img

替换字符串:

<h3 class="al-head">$4</h3>

DEMO