参见英文答案 >
Regex Named Groups in Java6
我想知道Java是否与C#的命名模式匹配相当.例如,在C#中,我可以这样做:
我想知道Java是否与C#的命名模式匹配相当.例如,在C#中,我可以这样做:
var pattern = @";(?<foo>\d{6});(?<bar>\d{6});"; var regex = new Regex(pattern,RegexOptions.None); var match = regex.Match(";123456;123456;"); var foo = match.Groups["foo"].Success ? match.Groups["foo"].Value : null; var bar = match.Groups["bar"].Success ? match.Groups["bar"].Value : null;
这似乎是一个干净的方式来抓住团体. Java可以做类似的事情,还是需要根据索引位置来抓取组?
String foo = matcher.group(0);
解决方法
这是从
Java 7开始支持的.你的C#代码可以翻译成如下:
String pattern = ";(?<foo>\\d{6});(?<bar>\\d{6});"; Pattern regex = Pattern.compile(pattern); Matcher matcher = regex.matcher(";123456;123456;"); boolean success = matcher.find(); String foo = success ? matcher.group("foo") : null; String bar = success ? matcher.group("bar") : null;
您必须创建一个Matcher对象,直到您调用find()
才能真正执行正则表达式测试.
(我使用find(),因为它可以在输入字符串中的任何地方找到匹配,如Regex.Match()
方法.如果正则表达式匹配整个输入字符串,则.matches()
方法只返回true)