3

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

^Mozilla.*Android.*AppleWebKit.*Chrome.*OPR\/([0-9\.]+)

如何获取与.*正则表达式匹配的子字符串?例如,对于上面的正则表达式,我会得到四个不同.*s 的四个子字符串。此外,我事先不知道.*有多少 s,即使我可以通过对给定的正则表达式字符串进行一些简单的操作来找出,但这会给程序带来更多的复杂性。我处理的数据量相当大,所以在这里真正关注效率。

4

2 回答 2

5

.*s替换为(.*)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(2)

.*此外,由于您提到您将不知道您的正则表达式将包含多少个 s,因此matcher.groupCount()您可以使用一种方法,如果您的正则表达式中唯一的捕获组确实是(.*)s。

为了您自己的启发,请尝试阅读有关捕获组的内容。

于 2013-07-09T22:57:44.660 回答
3

如何获取与正则表达式中的 .* 匹配的子字符串?例如,对于上面的正则表达式,我会得到四个不同 DOT STAR 的四个子字符串。

使用组:(.*)


另外,我事先不知道有多少个DOT STARs

构建您的正则表达式字符串,然后替换.*(.*)

String myRegex = "your regex here";
myRegex = myRegex.replace(".*","(.*)");

尽管我可以通过对给定的正则表达式字符串进行一些简单的操作来发现这一点,但这会给程序带来更多的复杂性

如果您不知道 regex 是如何制作的,并且 regex 不是由您的应用程序构建的,那么唯一的方法是在拥有它之后对其进行处理。如果您正在构建正则表达式,则附加(.*)到正则表达式字符串而不是附加.*

于 2013-07-09T22:58:16.910 回答