我正在尝试从正则表达式中捕获一个遵循此模式的组:
例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