谁能解释一下regex/(.*)\(.*)/?
我想在Groovy中使用正则表达式获取文件扩展名,比如谁能解释一下regex/(.*)\(.*)/?,regex,Regex,我想在Groovy中使用正则表达式获取文件扩展名,比如South.6987556.Input.csv.cop 向我展示了第二组将真正包含cop扩展名。这就是我想要的 0: [0,27] South.6987556.Input.csv.cop 1: [0,23] South.6987556.Input.csv 2: [24,27] cop 我只是不明白为什么结果不会是这样 0: [0,27] South.6987556.Input.csv.cop 1: [0,23] South 2: [24,2
South.6987556.Input.csv.cop
向我展示了第二组将真正包含cop
扩展名。这就是我想要的
0: [0,27] South.6987556.Input.csv.cop
1: [0,23] South.6987556.Input.csv
2: [24,27] cop
我只是不明白为什么结果不会是这样
0: [0,27] South.6987556.Input.csv.cop
1: [0,23] South
2: [24,27] 6987556.Input.csv.cop
要获得这种结果,正则表达式应该是什么?要获得所需的输出,正则表达式应该是:
((.*?)\.(.*))
查看演示站点右下角捕获的组
说明:
( group and capture to \1:
( group and capture to \2:
.*? any character except \n (0 or more
times) ? after * makes the regex engine
to does a non-greedy match(shortest possible match).
) end of \2
\. '.'
( group and capture to \3:
.* any character except \n (0 or more
times)
) end of \3
) end of \1
要获得所需的输出,您的正则表达式应该是:
((.*?)\.(.*))
查看演示站点右下角捕获的组
说明:
( group and capture to \1:
( group and capture to \2:
.*? any character except \n (0 or more
times) ? after * makes the regex engine
to does a non-greedy match(shortest possible match).
) end of \2
\. '.'
( group and capture to \3:
.* any character except \n (0 or more
times)
) end of \3
) end of \1
这里是这个正则表达式的可视化
(.*)\.(.*)
用词
匹配尽可能大的任何内容并引用它(.*)
匹配一个句点,无参考(无括号)\.
再次匹配任何内容,可能为空,并引用它(.*)
:(.*)
South.6987556.Input.csv
:\。
:(.*)
cop
South
和6987556.Input.csv.cop
,因为第一部分(.*)
不是可选的,而是贪婪的,后面必须跟一个句点,所以引擎会尝试匹配可能的最大字符串
您的预期结果将由以下正则表达式创建:
(.*)\(.*)
。量词后的?
(在本例中为*
)将引擎的行为切换为ungreedy,因此将搜索最小的匹配字符串。默认情况下,大多数正则表达式引擎都是贪婪的。这里是该正则表达式的可视化
(.*)\.(.*)
用词
匹配尽可能大的任何内容并引用它(.*)
匹配一个句点,无参考(无括号)\.
再次匹配任何内容,可能为空,并引用它(.*)
:(.*)
South.6987556.Input.csv
:\。
:(.*)
cop
South
和6987556.Input.csv.cop
,因为第一部分(.*)
不是可选的,而是贪婪的,后面必须跟一个句点,所以引擎会尝试匹配可能的最大字符串
您的预期结果将由以下正则表达式创建:
(.*)\(.*)
。量词后的?
(在本例中为*
)将引擎的行为切换为ungreedy,因此将搜索最小的匹配字符串。默认情况下,大多数正则表达式引擎都是贪婪的。原因是(.*)是“贪婪的”-它将吞噬尽可能多的字符。要使其不贪婪,请添加一个问号<代码>(.*)\(.*)@AvinashRaj它在标题中。最后一个?
是否属于正则表达式?你为什么不和我一起玩?请看@阿维纳什拉吉:没有?不是reg exp的一部分。我更新了标题。原因是(.*)是“贪婪的”-它将吞噬尽可能多的字符。要使其不贪婪,请添加一个问号<代码>(.*)\(.*)@AvinashRaj它在标题中。最后一个?
是否属于正则表达式?你为什么不和我一起玩?请看@阿维纳什拉吉:没有?不是reg exp的一部分。我更新了标题,它仍然允许像以前一样,有一个扩展名为en空的文件名argh。。。正确的。。。我忘记了*
,想到了+
。。。sry。。。你是right@bukart它不会捕获整个字符串。与标题中更新的正则表达式相对应的更新的我的Answer主要是关于所需且运行良好的reg exp(.*)\(.*)
的解释。谢谢。不,它仍然允许像以前一样,有一个扩展名为en空的文件名argh。。。正确的。。。我忘记了*
,想到了+
。。。sry。。。你是right@bukart它不会捕获整个字符串。与标题中更新的正则表达式相对应的更新的我的Answer主要是关于所需且运行良好的reg exp(.*)\(.*)
的解释。非常感谢。