Java Regex Matcher

时间:2012-05-20 12:19:49

标签: java regex matcher

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

String text = "foobar1foobar1";

我需要先获得参与1(foobar) 当我做那样的事情时:

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

但我收到“foobar1foobar”。

3 个答案:

答案 0 :(得分:7)

+量词是贪婪的,所以尽可能匹配。您应该使用此量词的reluctant version +?;然后你的模式变成:

(.+?)1

答案 1 :(得分:2)

贪婪和非贪婪的正则表达式。 .+贪婪,并将尽可能长时间匹配。添加?会使其变得非贪婪:.+?

对于你的例子,你真的不需要正则表达式,但我想这只是一个例子。 相反,你可以用你的例子做到这一点:

String firstPart = text.substring(0, text.indexOf('1'))
分裂中的

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

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

对于大多数人来说,两者都比regexp更容易阅读。如果你没有“1”,请小心。

答案 2 :(得分:1)

替代方案可能是使用拆分功能:

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

您要搜索的字符串是splitted [0]。