关于正则表达式的简单问题。 我有
String text = "foobar1foobar1";
我需要先获得参与1(foobar) 当我做那样的事情时:
Pattern date_pattern = Pattern.compile("(.+)1");
Matcher matcher = date_pattern.matcher(text);
matcher.group(1);
但我收到“foobar1foobar”。
答案 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]。