我有一个像
这样的简单正则表达式%(\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中有所改变)?
答案 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;
}
这是使用正则表达式的最有效方式(据我所知)。