为什么正则表达式中的"|"(或)在用作替换标准时会给出奇怪的结果



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

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

我想删除以下字符串中的"nya"one_answers"lah":

diserahkannyalah

它的结果不是显示"diserahkan",而是显示"disarahkanya"。因此,在尝试替换操作时,并非所有条件都得到满足。为什么会这样?Im使用Java并使用Matcher 中的replaceAll方法

您只需要添加一个量词:

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

查看regex演示

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

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

有关regex量词的更多详细信息,请参阅量词备忘表

最新更新