Java中的贪婪与非贪婪模式匹配

Java中的贪婪与非贪婪模式匹配,java,regex,greedy,Java,Regex,Greedy,使用JAVA捕获给定字符串中的以下组的正则表达式是什么: hey,soul,345 限制第一个单词也可以包含逗号。我有以下正则表达式: (.*),(.*),(.*) 但我基本上只想匹配最后3个逗号。我认为这并不需要正则表达式……如果您有一个字符串,其中的值用逗号分隔,并且您只需要最后3个逗号分隔的值(这意味着有“三个”值,但首先可能有一个逗号),您可以在逗号处分解/拆分字符串,并拥有一个值数组。然后只需为#2和#3值弹出最后2个数组元素,并为#1内爆/连接剩下的任何元素 您可以在正则表达式的

使用JAVA捕获给定字符串中的以下组的正则表达式是什么:

hey,soul,345
限制第一个单词也可以包含逗号。我有以下正则表达式:

(.*),(.*),(.*)

但我基本上只想匹配最后3个逗号。

我认为这并不需要正则表达式……如果您有一个字符串,其中的值用逗号分隔,并且您只需要最后3个逗号分隔的值(这意味着有“三个”值,但首先可能有一个逗号),您可以在逗号处分解/拆分字符串,并拥有一个值数组。然后只需为#2和#3值弹出最后2个数组元素,并为#1内爆/连接剩下的任何元素

您可以在正则表达式的末尾添加一个
$
以匹配字符串的最后一部分,然后在每个捕获组中,而不是匹配
(任何字符)您可以匹配任何非逗号字符:
[^,]
。如果您想通过正则表达式来完成,那么应该得到最后三个逗号分隔的组。所以你的正则表达式应该是:

(.*),([^,]*),([^,]*)$

OP说第一个值中可能有逗号,所以这不起作用。第一个捕获的组需要是一个匹配所有
(.*),([^,]*),([^,]*)$
Hmm好的点。谢谢你发现了。现在修改答案。@syker:假设字符串中没有比这个更多的内容,从技术上讲,正则表达式没有问题,它应该完全符合您的要求……字符串中有比这个更多的内容吗?