正则表达式替换第二个<p> -tag的争用

时间:2017-09-27 18:41:31

标签: php regex

输出(var $ DESC)

 <p>erster Absatz</p>
 <p>zweiter Absatz</p>

正则表达式(PHP)

 preg_replace("<([a-z][a-z0-9]*)\b[^>]*>(.*?)</\1>{2}", '', $DESC)

我想只删除第二个p,但这个正则表达式找到了两个。谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

通常我会告诉你使用HTML解析器而不是正则表达式,但由于你的要求是如此具体,这实际上可以通过正则表达式安全地完成。

(?<=<\/p>)\s+<p>[\w ]+<\/p>

https://regex101.com/r/Yqaajy/6

说明:

(?<=<\/p>) - 确保模式的其余部分前面有一个<\p>结束标记(正面反面)。

\s+ - 任意数量的空白字符。请注意,如果启用了单线模式,这将无法正确匹配。

<p>[\w ]+<\/p> - 包含一个或多个单词字符(数字,字母和下划线)和空格的段落块。

答案 1 :(得分:0)

试试这个:

** Script Error: Invalid argument: got