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

bor*_*wis 3 java regex

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

%(\d+)\$@[_a-zA-Z0-9]+@
Run Code Online (Sandbox Code Playgroud)

我不想写

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

我真正想做的是拥有一个像这样的衬里

// do something with
Pattern.compile(myRegex).matcher(myText).match().group(1);
Run Code Online (Sandbox Code Playgroud)

你知道在 Java 中做到这一点的好方法吗(我正在使用 Java 7,但也许在 8 中发生了一些变化)?

shm*_*sel 6

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

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