我正在尝试从正则表达式中捕获一个将遵循此模式的组:
Ex1 - anyanyany
第1组必须为anyanyany
Ex2 - anyanyany.abcany
第1组必须为anyanyany
Ex3 - anyany.abcde.fghi
第1组必须为anyany.abcde
当我尝试(.+)(?:\.)
时,它只返回Ex2和Ex3。如果我为(.+)(?:\.)*
更改它,则返回相同的输入字符串。
我真的不知道自己要做些什么来解决它。有人可以帮帮我吗?我缺少哪些知识?
答案 0 :(得分:3)
答案 1 :(得分:2)
试试这个非贪婪的正则表达式。
(.+?)(?:\.[^.]*)?$
在java中你需要再次转义反斜杠,所以它就像是,
Pattern p = Pattern.compile("(.+?)(?:\\.[^.]*)?$");
答案 2 :(得分:0)
而不是正则表达式捕获想要的部分,消除不需要的部分:
s = s.replaceAll("\\.[^.]+$","");
答案 3 :(得分:0)
尝试使用以下正则表达式模式以符合您的标准:
如果您应该匹配由点标记的前两个单词:^([^\.]+)(?:\.[^\.]+)?$|(?:([^\.]+\.[^\.]+)\.)
a => a
a.b => a
a.b.c => a.b
a.b.c.d => a.b
如果您应该匹配由点标记的每个单词,而不是最后一个标记:^([^\.]+)(?:\.[^\.]+)?$|(?:([^\.]+\.[^\.]+)\.)
a => a
a.b => a
a.b.c => a.b
a.b.c.d => a.b.c