我有成千上万个不同的正则表达式,它们看起来像这样:
^Mozilla.*Android.*AppleWebKit.*Chrome.*OPR\/([0-9\.]+)
如何获取匹配正则表达式中的.*
的子字符串?例如,对于上面的正则表达式,我会得到四个不同的 .*
的四个子字符串。此外,我事先不知道有多少 .*
,即使我可以通过对给定的正则表达式字符串进行一些简单的操作来找出,但这会给该程序。我处理的数据量相当大,所以真正关注这里的效率。
最佳答案
替换 .*
与 (.*)
s 并使用 matcher.group(n)
.例如:
Pattern p = Pattern.compile("1(.*)2(.*)3");
Matcher m = p.matcher("1abc2xyz3");
m.find();
System.out.println(m.group(2));
xyz
注意第二个的匹配(.*)
被退回(因为使用了 m.group(<b>2</b>)
)。
另外,既然你提到了你不知道有多少.*
s 你的正则表达式将包含,有一个 matcher.groupCount()
您可以使用的方法,如果您的正则表达式中唯一的捕获组确实是 (.*)
为了您自己的启蒙,请尝试阅读有关 capturing groups 的内容.
关于java - 如何获得 .* 在正则表达式中匹配的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17559663/