1

关于正则表达式的简单问题。我有

String text = "foobar1foobar1";

当我做这样的事情时,我需要在第一个(foobar)之前获得一部分:

Pattern date_pattern = Pattern.compile("(.+)1");
Matcher matcher = date_pattern.matcher(text);
matcher.group(1);

但我收到“foobar1foobar”。

4

3 回答 3

7

量词是贪婪的+,所以它尽可能匹配。你应该是这个量词的不情愿版本+?;然后你的模式变成:

(.+?)1
于 2012-05-20T12:22:47.763 回答
2

贪婪和非贪婪的正则表达式。.+是贪婪的,并且会进行尽可能长的匹配。添加 a?将使其不贪婪:.+?

对于您的示例,您实际上并不需要正则表达式,但我想这只是一个示例。相反,您可以使用示例执行此操作:

String firstPart = text.substring(0, text.indexOf('1'))

甚至是拆分中的(非常简单的)正则表达式:

String firstPart = text.split("1")[0]

对于大多数人来说,两者都比正则表达式更容易阅读。但是,如果您没有“1”,请小心。

于 2012-05-20T12:24:41.223 回答
1

另一种方法可能是使用拆分功能:

String s="foobar1foobar2";
String[] splitted = s.split("1");

您正在搜索的字符串在 splitted[0] 中。

于 2012-05-20T12:38:16.483 回答