在html外部的大括号内应用正则表达式

时间:2017-09-03 22:42:26

标签: php html regex

我试图通过在PHP中使用以下reg表达式删除( )之间的内容,我的代码也删除了HTML标记内的内容。我怎么能过来呢?

输入 - 解释(诗)是一组<a href="/wiki/Statement_(logic)" title="Statement (logic)">statements</a>,通常构造为

预期输出 - 解释是一组<a href="/wiki/Statement_(logic)" title="Statement (logic)">statements</a>通常构造为

我得到的输出 - 解释是一组<a href="/wiki/Statement_" title="Statement ">statements</a>通常构造为

我的代码是 - preg_replace('/\(([^()]*+|(?R))*\)\s*/', ' ', $string);

1 个答案:

答案 0 :(得分:0)

此方法假设您只想从括号子字符串删除过程中取消<a>标记。

模式:~<a.*?</a>(*SKIP)(*FAIL)| *\([^()]*\) *~ 替换: Regex Demo

如果您的$string可以包含任何/所有html标记,则必须稍微放松模式。

模式:~<(\S+).*?</\1>(*SKIP)(*FAIL)| *\([^()]*\) *~ 替换: Regex Demo

*请注意我的模式中我匹配(文字空间)而不是\s这是为了保留新行并保持字符串预期结构。

(*SKIP)(*FAIL)可以提前取消不需要的匹配。