【发布时间】:2011-04-25 00:47:07
【问题描述】:
正则表达式String:
"[Ff][uU][Nn][Cc] "
匹配输入:
"fUnC "
但不是:
"func across( a, b )"
我不明白为什么...
我在这里测试我的表达方式: http://www.regexplanet.com/simple/index.html
我发现我(愚蠢地)需要我的正则表达式为 "[Ff][uU][Nn][Cc] .*" 才能匹配。
已解决:如果您正在寻找相当于子匹配的内容,请不要使用便捷方法Pattern.Matches(regex, input)。您应该改用Matcher.find() 方法。
【问题讨论】:
-
我不是要匹配整个字符串,只是测试是否可以在字符串中检测到符号“func”。
-
为什么不使用使正则表达式不区分大小写的选项?
-
这样会更干净,但是没有用。使用测试站点(和我自己的代码)获得匹配的唯一方法是在最后使用
.*。 -
Java 的
Pattern.Matches(regex, input)显然试图只匹配整个字符串。另外,你不能在使用 Pattern.Matches 时设置标志,所以我没有区分大小写。 -
如您所见,Java 的
matches方法与其说是一种方便的方法,不如说是一种不方便的方法。 :) 你不是第一个被 Java 对 matches 一词的奇怪重新定义绊倒的人。还有plenty of other gotchas。 :(