Java 正则表达式正在返回不希望的结果
我正试图从正则表达式中捕获一个遵循以下模式的组: Ex1-Java 正则表达式正在返回不希望的结果,java,regex,Java,Regex,我正试图从正则表达式中捕获一个遵循以下模式的组: Ex1-anyanyany组1必须是anyanyanyany Ex2-anyanyany.abcany1组必须是anyanyany Ex3-anyany.abcde.fghi1组必须是anyany.abcde 当我尝试(.+)(?:\)时,它只返回Ex2和Ex3。如果我将其更改为(.+)(?:\)*,它将返回相同的输入字符串 我真的不知道我该怎么解决它。有人能帮我吗?我缺少哪方面的知识 您可以使用此正则表达式: ^([^.]+(?:\.[^.]+
anyanyany
组1必须是anyanyanyany
Ex2-anyanyany.abcany
1组必须是anyanyany
Ex3-anyany.abcde.fghi
1组必须是anyany.abcde
当我尝试(.+)(?:\)
时,它只返回Ex2和Ex3。如果我将其更改为(.+)(?:\)*
,它将返回相同的输入字符串
我真的不知道我该怎么解决它。有人能帮我吗?我缺少哪方面的知识
您可以使用此正则表达式:
^([^.]+(?:\.[^.]+)?)
PS:在中使用了
^([^.\n]+(?:\.[^.\n]+)
,因为演示在不同的行中有多个输入。您可以使用此正则表达式:
^([^.]+(?:\.[^.]+)?)
PS:在中使用了
^([^.\n]+(?:\.[^.\n]+)
,因为演示在不同的行中有多个输入。请尝试此非贪婪正则表达式
(.+?)(?:\.[^.]*)?$
在java中,您需要再次避开反斜杠,因此
Pattern p = Pattern.compile("(.+?)(?:\\.[^.]*)?$");
试试这个非贪婪的正则表达式
(.+?)(?:\.[^.]*)?$
在java中,您需要再次避开反斜杠,因此
Pattern p = Pattern.compile("(.+?)(?:\\.[^.]*)?$");
消除不需要的部分,而不是使用正则表达式来捕获需要的部分:
s = s.replaceAll("\\.[^.]+$","");
消除不需要的部分,而不是使用正则表达式来捕获需要的部分:
s = s.replaceAll("\\.[^.]+$","");
尝试以下正则表达式模式以符合您的标准:
- 如果要匹配由点标记的前两个单词:
^([^\.]+)(?:\.[^\.]+)?$。(?:([^\.]+\.[^\.]+)\。
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
- 如果要匹配由点标记的前两个单词:
^([^\.]+)(?:\.[^\.]+)?$。(?:([^\.]+\.[^\.]+)\。
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
abc.def.ghi.jkl.mno.pqr
@anubhava的abc.def
,感谢您的回答(+1)。如果我们把anyany.abcany
作为输入,输出将是anyanyany
。但是它返回的是anyanyany.abcany
您可以看到,这个问题并不清楚您是否希望在点之后匹配除最后一个字符串以外的所有字符串。如果想法是获取除最后一个点加上字母以外的所有字符串,那么您的正则表达式将以abc.def.ghi.jkl失败,也就是说,它只返回abc.def,我不喜欢里面的\n-它的目的是什么?想法是用一个或两个点抓住绳子。因此,是的,它将匹配来自abc.def.ghi.jkl.mno.pqr
@anubhava的abc.def
,感谢您的回答(+1)。如果我们把anyany.abcany
作为输入,输出将是anyanyany
。但是它返回的是anyanyany.abcany
你可以看到,这个问题不清楚你是否想在点之后匹配除最后一个字符串以外的所有字符串。你不必在[and]之间转义点(.)。而且正则表达式与a.b.c.不匹配。d@laune:为了完成您的评论,我编辑了我的回复。您不必跳过[和]之间的点(.)。而且正则表达式与a.b.c.不匹配。d@laune:为了完成您的评论,我编辑了我的回复。