PHP正则表达式匹配模式匹配的最后一次出现

时间:2015-02-06 04:51:32

标签: php regex

我知道有一个负面的前瞻性正则表达式可以匹配最后一次出现的字符串。

示例:replace last occurrences of string

我想做这样的事情。

示例:

$string = 'hello example (a) hello example (b) (c)';
echo preg_replace('/\(.*?\)(?!.*\(.*?\))/', '', $string);

我尝试做的是替换最后一次出现的(。*),但我失败了。我得到的输出是你好示例。它取代了整个第一个(和最后一个)(a)你好例子(b)(c)

我的预期输出是你好例子(a)你好例子(b)

任何人都可以提供一些线索吗?什么是正确的正则表达式来实现我想要的。非常感谢你。

2 个答案:

答案 0 :(得分:2)

您想在此使用否定字符类而不是.*?

前瞻断言中的.*将一直匹配到(...)的最后一次出现,然后连续回溯以保持继承顺序。

preg_replace('/\([^)]*\)(?!.*\([^)]*\))/', '', $string);

要简化此任务,请将所有内容保留到最后一次出现。

preg_replace('/.*\K\(.*?\)/', '', $string);

答案 1 :(得分:0)

你错了是使用\(.*\)它取代了完整的子串,它从(开始并以)结束。 .* - 最大量化器,(.*) - 最小量化器。

尝试使用:

$string = 'hello example (a) hello example (b) (c)'; echo preg_replace('/\((.*)\)$/', '', $string);