Java匹配正则表达式和提取组oneliner

时间:2017-04-24 09:25:33

标签: java regex

我有一个像

这样的简单正则表达式
%(\d+)\$@[_a-zA-Z0-9]+@

我不想写

Matcher m = Pattern.compile(myRegex).matcher(myText);
if (m.matches())
   // do something with m.group(1);

我真正想做的是像

这样的单线
// do something with
Pattern.compile(myRegex).matcher(myText).match().group(1);

你知道在Java中这样做的好方法(我使用的是Java 7,但也许在8中有所改变)?

3 个答案:

答案 0 :(得分:2)

从Java 9开始,您可以流式匹配结果并获取第一个结果的第一组:

String result = Pattern.compile(myRegex)
        .matcher(myText)
        .results()
        .map(m -> m.group(1))
        .findFirst()
        .orElse(null);

答案 1 :(得分:1)

这是一个:

Integer.valueOf(Pattern.compile(myRegex).matcher(myText).matches() ? 
        Pattern.compile(myRegex).matcher(myText).group(1) : "0");
//-----------------------------------------Not match---------^

修改

你也可以使用:

Matcher m;
Integer.valueOf((m = Pattern.compile(myRegex).matcher(myText)).matches() ? 
        m.group(1) : "0");

答案 2 :(得分:0)

创建一个静态匹配器:

private static Matcher matcher = Pattern.compile(myRegex).matcher("");

并以这种方式使用它:

public String match(String myText, String defaultValue) {
  matcher.reset(myText);
  return matcher.matches() ? matcher.group(1) : defaultValue;
}

这是使用正则表达式的最有效方式(据我所知)。