有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我有一个简单的正则表达式,比如

%(\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实现这一点的好方法吗(我使用的是Java7,但可能在8中有所改变)


共 (2) 个答案

  1. # 1 楼答案

    创建静态匹配器:

    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;
    }
    

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

  2. # 2 楼答案

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

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