为什么这个非贪婪的正则表达式比我想要的更多?

Dan*_*lan 3 java regex non-greedy

我认为这应该回归"州,国家",但它正在回归"国家"

System.out.println("city,state,country".replaceAll("(.*,)?", ""));
Run Code Online (Sandbox Code Playgroud)

为什么它以这种方式工作,如何让它返回"州,国家".我希望这个答案是一个正则表达式.

Psh*_*emo 12

  1. 如果你想.*成为非贪婪你需要添加?之后*.
  2. replaceAll 将替换所有出现的匹配部分,因此您应该使用 replaceFirst

尝试

System.out.println("city,state,country".replaceFirst(".*?,", ""));
Run Code Online (Sandbox Code Playgroud)

输出:

state,country
Run Code Online (Sandbox Code Playgroud)

如果你不能使用replaceFirst并且需要留下来,replaceAll那么@Reimeus的回答可能正是你要找的.


Rei*_*eus 7

顾名思义,replaceAll替换所有匹配的组.您需要更具体地匹配组的位置.要指定第一个匹配组,您可以指定String ^锚点的起点:

"city,state,country".replaceAll("^(.*?,)", "")
Run Code Online (Sandbox Code Playgroud)