我有数千种不同的正则表达式,它们看起来像这样:
^Mozilla.*Android.*AppleWebKit.*Chrome.*OPR\/([0-9\.]+)
如何获得与正则表达式中.*
匹配的子字符串?例如,对于上面的正则表达式,我会得到四个不同.*
s的四个子串。另外,我事先并不知道有多少.*
,尽管我可以通过对给定的正则表达式字符串做一些简单的操作来找出,但这会给程序带来更多的复杂性。我处理了相当多的数据,所以真的关注这里的效率。
答案 0 :(得分:5)
将.*
替换为(.*)
并使用matcher.group(n)
。例如:
Pattern p = Pattern.compile("1(.*)2(.*)3");
Matcher m = p.matcher("1abc2xyz3");
m.find();
System.out.println(m.group(2));
xyz
注意如何返回 second (.*)
的匹配(因为使用了m.group(2)
)。
此外,既然你提到你不知道你的正则表达式将包含多少.*
,那么你可以使用matcher.groupCount()
方法,如果正则表达式中唯一的捕获组确实是(.*)
秒。
对于你自己的启蒙,请尝试阅读capturing groups。
答案 1 :(得分:3)
如何在正则表达式中获得与。*匹配的子字符串?例如,对于上面的正则表达式,我会得到四个不同的DOT STAR的四个子串。
使用群组:(.*)
另外,我事先并不知道有多少个DOT STAR
构建正则表达式字符串,然后将.*
替换为(.*)
:
String myRegex = "your regex here";
myRegex = myRegex.replace(".*","(.*)");
即使我可以通过对给定的正则表达式字符串执行一些简单的操作来找到相关内容,但这会给程序带来更多复杂性
如果您不知道正则表达式是如何制作的并且正则表达式不是由您的应用程序构建的,那么唯一的方法是在您拥有它之后对其进行处理。如果您要构建正则表达式,请将(.*)
附加到正则表达式字符串,而不是附加.*