2017-09-03 116 views
1

我想通过在PHP中使用下面的表达式来删除()之间的内容,我的代码也在删除HTML标签内的内容。我怎么能过来呢?正则表达式适用于html外的大括号内容

输入 - 一种解释(诗)通常构造成

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

输出I GOT-的解释一组<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

嗨,罗伯特,我修改了我的问题。 –

回答

0

此方法假定您只希望取消其参赛资格<a>标记来自括号子字符串删除过程。

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

如果您$string可以包含任何/所有的HTML标签,你将不得不放松的格局位。

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

*在我的模式请注意,我匹配,而不是\s(文字空间),这是保存一个新的生产线,并保持琴弦预期结构。

(*SKIP)(*FAIL)工程预先取消了不需要的匹配资格。