我正在使用java来进行正则表达式匹配。我使用rubular验证匹配和ideone来测试我的代码。
我从this SO solution获得了一个正则表达式,它与我想要的组相匹配,但我在java中的实现并不匹配。当它打印'value'时,它打印的值为commaSeparatedString而不是matcher.group(1)我希望捕获的println组/输出为“v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso”
String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
//match everything after first comma
String myRegex = ",(.*)";
Pattern pattern = Pattern.compile(myRegex);
Matcher matcher = pattern.matcher(commaSeparatedString);
String value = "";
if (matcher.matches())
value = matcher.group(1);
else
value = commaSeparatedString;
System.out.println(value);
(编辑:我遗漏了commaSeparatedString并不总是包含2个逗号。相反,它总是包含0个或更多逗号)
答案 0 :(得分:4)
如果你不需要用正则表达式来解决它,你可以试试这个:
int size = commaSeparatedString.length();
value = commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1,size);
即,上面的代码返回从第一个逗号索引开始的子字符串。
修改强>
抱歉,我省略了更简单的版本。感谢其中一位评论员,你也可以使用这一行:
value = commaSeparatedString.substring( commaSeparatedString.indexOf(",") );
答案 1 :(得分:3)
正则表达式的定义是错误的。它应该是:
String myRegex = "[^,]*,(.*)";
答案 2 :(得分:1)
你是Java误导的正则表达式方法命名的另一个受害者。
.matches()
自动将正则表达式锚定在开头和结尾(这与“正则表达式匹配”的定义完全矛盾)。您要查找的方法是.find()
。
然而,对于这样一个简单的问题,最好使用@ DelShekasteh的解决方案。
答案 3 :(得分:0)
我会这样做
String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
System.out.println(commaSeparatedString.substring(commaSeparatedString.indexOf(",")+1));
答案 4 :(得分:0)
这是另一种限制拆分的方法
String[] spl = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso".split(",", 2);
if (spl.length == 2)
System.out.println(spl[1]);
Byt IMHO Del's answer最适合你的情况。
答案 5 :(得分:0)
我会使用replaceFirst
String commaSeparatedString = "Vtest7,v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso";
System.out.println(commaSeparatedString.replaceFirst(".*?,", ""));
打印
v123_gpbpvl-testpv1,v223_gpbpvl-testpv1-iso
或者你可以使用较短但迟钝的
System.out.println(commaSeparatedString.split(",", 2)[1]);