正则表达式PHP查找字符串并删除父

时间:2016-07-20 13:24:45

标签: php regex

在一个非常大的字符串中我必须删除[w:r] [/ w:r],其中存在子字符串“delete”。 示例-of我要删除的子字符串 - :

[w:r w:rsidR="00A37EED" w:rsidRPr="00FE1BE1"][w:rPr][w:b][/w:rPr][w:t]delete[/w:t][/w:r]

这是我最好的猜测\[w:r.*delete.*\[\/w:r\] 我尝试了多个正则表达式,但这不是我的强项。

我在regex101上复制粘贴字符串,这是链接https://regex101.com/r/wS4bL2/1

我成功地找到了所需的模式,但我无法在[/w:r]的第一次出现时停止。

PHP代码 - 如果您想知道 - :

$this->tempDocumentMainPart = preg_replace('/\[w:r.*delete.*\[\/w:r\]/','',$this->tempDocumentMainPart);

1 个答案:

答案 0 :(得分:2)

.*将溢出[....]。一种方法是使用tempered greedy token

\[w:r\b(?:(?!\[w:r\b).)*?delete(?:(?!\[w:r\b).)*?\[\/w:r]
        ^^^^^^^^^^^^^^^^^       ^^^^^^^^^^^^^^^^^

请参阅regex demo

(?:(?!\[w:r\b).)*?淬火贪婪令牌将限制一个[w:r内部的匹配(右边有一个单词边界)。

添加DOTALL修饰符/s'/PATTERN/s')以匹配换行符。