以下代码有效:
String str= "test with foo hoo";
Pattern pattern = Pattern.compile("foo");
Matcher matcher = pattern.matcher(str);
if(matcher.find()) { ... }
但是这个例子没有:
if(Pattern.matches("foo", str)) { ... }
而且这个版本也不是:
if(str.matches("foo")) { ... }
在实际代码中,str 是一段多行的文本,如果被匹配器区别对待的话,同样在实际代码中,replace 将用于替换一串文本。
总之,奇怪的是它在第一个版本中有效,而在其他两个版本中却无效。
编辑
好的,我意识到如果 if(matcher.matches()) { ... }
,行为与第一个示例相同。用于代替 matcher.find
.我仍然无法使其适用于多行输入,但我坚持使用 Pattern.compile
/Pattern.matcher
无论如何解决。
最佳答案
您的最后几个示例失败了,因为 matches
向您的正则表达式添加了隐式开始和结束 anchor 。换句话说,它必须是整个字符串的完全匹配,而不是部分匹配。
您可以通过使用 .*foo.*
来解决这个问题。不过,使用 Matcher.find
是更灵活的解决方案,所以我建议坚持使用。
关于Java正则表达式基本使用问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2808484/