我正在尝试从正则表达式中捕获一个遵循此模式的组:

例1-anyanyany组1必须为anyanyany

例2-anyanyany.abcany组1必须为anyanyany

Ex3-anyany.abcde.fghi组1必须为anyany.abcde

当我尝试(.+)(?:\.)时,它仅返回Ex2和Ex3。如果我将其更改为(.+)(?:\.)*,它将返回相同的输入字符串。

我真的不知道该怎么解决。有人可以帮我吗?我缺少哪些知识?

https://regex101.com/r/jG6wY8/2

最佳答案

试试这个非贪婪的正则表达式。

(.+?)(?:\.[^.]*)?$


在Java中,您需要再转义一次反斜杠,所以就像

Pattern p = Pattern.compile("(.+?)(?:\\.[^.]*)?$");


DEMO

07-26 07:55