是否可以仅使用一个组来获得此正则表达式模式匹配

时间:2017-03-20 16:16:37

标签: regex regex-greedy regex-group

所以,这是模式

^(.*)\..*$|^(.*)$

测试字符串:  file.tar.gz  2.文件

首次测试时,我会在'group 1'中获得'file.tar',在'group 2'中获得'file'。但我只希望输出只有一组。我不能提出任何其他模式。甚至不确定是否可能。

2 个答案:

答案 0 :(得分:1)

您需要使第一个.*延迟,并在可选组中使用否定字符类:

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

请参阅regex demo

<强>详情:

  • ^ - 字符串开头
  • (.*?) - 尽可能少的0个字符
  • (?:\.[^.]*)? - 一个可选的非捕获组,匹配1或0个序列:
    • \. - 一个点
    • [^.]* - 除.
    • 以外的0个字符
  • $ - 字符串结束。

答案 1 :(得分:0)

另一种使用双重否定且没有捕获组的方法:

^.*(?![^.])

(字符串开头的任意数量的字符,后面跟不是一个不是点的字符。)

&#34;后面没有一个不是一个点的字符&#34; &LT; =&GT; &#34;后跟一个点或字符串的结尾&#34;

demo