Java正则表达式基本使用问题

标签 java regex

以下代码有效:

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/

相关文章:

java - 如何使用 pom.xml 更新属性文件中的环境值

java - 调用 Oracle 存储过程抛出由 : java. sql.SQLException 引起的异常:无效的列类型:1111

Java - 等待和通知的理想使用?

javascript - ExtJS:验证整小时时间

JavaFX 屏幕分辨率缩放

Java RMI : Pass remote object reference back to host

sql-server - 将逗号分隔值拆分为行

java - 数数没有。在java中使用正则表达式的单词

正则表达式(或 bash),获取引号之间的管道(perl)

regex - Linux 中的 sed 命令。如何用另一个字符串替换以 xxx 开头并以 yyy 结尾的字符