过早捕获PHP正则表达式的组

时间:2015-06-24 17:05:46

标签: php regex html-parsing preg-match capture-group

我将HTML存储在MySQL数据库中,我将从Joomla迁移到新的WordPress安装。我需要删除每页底部的一些标题文字。

HTML的一个例子:

<a href="some/link">link 1</a><p>some really long description</p><a href="another/link">link 2</a>CAPTION TEXT HERE[/caption]

我使用PHP脚本查询数据库并进行正则表达式匹配。

到目前为止我的正则表达式:

/(<\/a>)(.*?)(\[\/caption\])/

我需要完全删除第二个字幕组(CAPTION TEXT HERE),因此实质上用第1组和第3组替换第1,2和3组。第2组可以包含任何字母数字或特殊字符。

我遇到的问题是捕获组1匹配链接1的结束锚标记并一直持续到[/caption]

会发生什么:

</a><p>some really long description</p><a href="another/link">link 2</a>CAPTION TEXT HERE[/caption]

替换为:

<a href="some/link">link 1</a>[/caption]

当我真正需要的是:

<a href="some/link">link 1</a><p>some really long description</p><a href="another/link">link 2</a>[/caption]

提前谢谢!

1 个答案:

答案 0 :(得分:1)

男性不会在匹配的文字中包含>

(<\/a>)([^>]*?)(\[\/caption\])

Demo