为什么“|” (或)正则表达式在用作替换标准时会产生奇怪的结果

时间:2016-05-16 18:12:27

标签: java regex

首先,我不是正则表达式的专家。所以请看看这个正则表达式:

([km]u|nya|[kl]ah|pun)$

我想在以下字符串中删除“nya”和“lah”:

diserahkannyalah

而不是显示“diserahkan”,其结果是“diserahkannya”。因此,尝试更换操作时并非所有标准都满足。 为什么会这样?我使用Java并使用Matcher中的replaceAll方法

1 个答案:

答案 0 :(得分:1)

您只需要添加量词:

([km]u|nya|[kl]ah|pun)+$
                      ^

请参阅regex demo

+告诉正则表达式引擎重复匹配+量化1次或更多次的模式。这里,量化器出现在关闭捕获组的)之后,因此,整个捕获组模式被量化。

请注意,如果您只是删除所有这些子字符串,则可以使用非捕获组:(?:[km]u|nya|[kl]ah|pun)+$

有关正则表达式量词的更多详细信息,请参阅Quantifier Cheat Sheet