关于正则表达式的简单问题。我有
String text = "foobar1foobar1";
当我做这样的事情时,我需要在第一个(foobar)之前获得一部分:
Pattern date_pattern = Pattern.compile("(.+)1");
Matcher matcher = date_pattern.matcher(text);
matcher.group(1);
但我收到“foobar1foobar”。
量词是贪婪的+
,所以它尽可能匹配。你应该是这个量词的不情愿版本+?
;然后你的模式变成:
(.+?)1
贪婪和非贪婪的正则表达式。.+
是贪婪的,并且会进行尽可能长的匹配。添加 a?
将使其不贪婪:.+?
对于您的示例,您实际上并不需要正则表达式,但我想这只是一个示例。相反,您可以使用示例执行此操作:
String firstPart = text.substring(0, text.indexOf('1'))
甚至是拆分中的(非常简单的)正则表达式:
String firstPart = text.split("1")[0]
对于大多数人来说,两者都比正则表达式更容易阅读。但是,如果您没有“1”,请小心。
另一种方法可能是使用拆分功能:
String s="foobar1foobar2";
String[] splitted = s.split("1");
您正在搜索的字符串在 splitted[0] 中。