java - 如何获得 .* 在正则表达式中匹配的内容?

标签 java regex

我有成千上万个不同的正则表达式,它们看起来像这样:

^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/

相关文章:

java - 两种实现回调的方式,那么他有什么区别

java - 访问 JTableHeader 中的 JTextField

regex - "number tab tab"的 coldFusion 正则表达式

java - Android 中的 Dialog 内的 setAdapter() 无法弹出吗?

java - iText - 第二次尝试生成 PDF 失败

regex - Perl:如何匹配 FULLWIDTH LATIN SMALL

java - 正则表达式帮助,来自标签子标签内属性的数据

java - 在 Java 中使用正则表达式更改字符串

c# - Visual Studio : Replace all references to ConfigurationManager. AppSettings 到 CloudConfigurationManager.GetSetting 使用正则表达式

java - 使用正则表达式将数字获取到字符串中