PHP正则表达式-删除特定模式后的特定字符串

PHP正则表达式-删除特定模式后的特定字符串,php,regex,Php,Regex,我在WordPress中制作列短代码,它总是在标记后添加 因此,转储变量的原始HTML结果如下所示: <column class="size-5"></p> .... </column> .... 我想用regex删除那个孤零零的,所以我做了如下操作: $content = preg_replace("/(?!<column[^<]+)<\/p>/", '', $content); $content=preg\u replace

我在WordPress中制作列短代码,它总是在标记后添加

因此,转储变量的原始HTML结果如下所示:

<column class="size-5"></p>
....
</column>

....
我想用regex删除那个孤零零的

,所以我做了如下操作:

$content = preg_replace("/(?!<column[^<]+)<\/p>/", '', $content);

$content=preg\u replace(“/(?!首先,您应该知道使用正则表达式操作HTML是容易受到攻击的,并且在使用任意HTML代码的情况下可能无法100%工作。您应该只在知道自己在做什么时才使用它(您自己以独特的方式生成HTML,或者HTML提供程序是已知的,并使用unqiue方法进行HTML转义,等等)


接下来,您不需要使用任何负面的lookaheads。您使用的模式匹配任何不是
起始子序列的

,这是否意味着您只需要删除第一个匹配?(您没有在regexr中激活
/g
修饰符)。您知道,
preg\u replace
有一个$limit参数,您可以将其设置为
1
。说实话,
(?!Try
$content=preg\u replace()/(我想在
之后匹配每一个

,而不仅仅是第一个。我明白了,所以在Regexr中,它的行为与
/g
类似。还有其他方法吗?我想这是一个非常常见的用例。这是一个非常常见的regex问题,有很多方法可以做到:
$content=preg\u/(WikTrTrBiBi)是的!这很好。谢谢。你可以写一个答案,我会接受它。谢谢你的详细信息。ItI会添加另一个提示。如果你能保证没有<代码>列编辑器标签,也没有<代码>。
$content = preg_replace('/(<column\b[^<]*>)<\/p>/', '$1', $content);
$content = preg_replace('/<column\b[^<]*>\s*\K<\/p>/', '', $content);