Regex Groovy matcher.matches似乎不适用于有效的正则表达式

Regex Groovy matcher.matches似乎不适用于有效的正则表达式,regex,groovy,Regex,Groovy,我之前问过一个类似的问题,但我没有使用Groovy/Java8Regex/pattern/MatcherAPI的不同部分 Groovy 2.4在这里: class TestPatterns { static void main(String[] args) { Matcher matcher String illNameChars = /[`\/;\[\]&<>?:\()|-]+/ String input = "Bup

我之前问过一个类似的问题,但我没有使用Groovy/Java8Regex/pattern/MatcherAPI的不同部分

Groovy 2.4在这里:

class TestPatterns {
    static void main(String[] args) {
        Matcher matcher
        String illNameChars = /[`\/;\[\]&<>?:\()|-]+/
        String input = "Bupo`dupo"
//        String input = "Bupo/dupo"
//        String input = "Bupo;dupo"
//        String input = "Bupo[dupo"
//        String input = "Bupo]dupo"
//        String input = "Bupo&dupo"
//        String input = "Bupo<dupo"
//        String input = "Bupo>dupo"
//        String input = "Bupo?dupo"
//        String input = "Bupo:dupo"
//        String input = "Bupo\\dupo"
//        String input = "Bupo(dupo"
//        String input = "Bupo)dupo"
//        String input = "Bupo|dupo"
//        String input = "Bupo-dupo"
        if(input) {
            matcher = input =~ illNameChars
            if(matcher.matches()) {
                println "Illegal character detected!"
            } else {
                println "The input is perfectly legal."
            }
        }
    }
}
类测试模式{
静态void main(字符串[]参数){
匹配器匹配器
字符串illNameChars=/[`\/;\[\]&?:\()\;-]+/
字符串输入=“Bupo`dupo”
//字符串输入=“Bupo/dupo”
//字符串输入=“Bupo;dupo”
//字符串输入=“Bupo[dupo”
//字符串输入=“Bupo]dupo”
//字符串输入=“Bupo和dupo”
//字符串输入=“Bupodupo”
//字符串输入=“Bupo?dupo”
//字符串输入=“Bupo:dupo”
//字符串输入=“Bupo\\dupo”
//字符串输入=“Bupo(dupo)”
//字符串输入=“Bupo)dupo”
//字符串输入=“Bupo | dupo”
//字符串输入=“不必重复”
如果(输入){
matcher=input=~illNameChars
if(matcher.matches()){
println“检测到非法字符!”
}否则{
println“输入完全合法。”
}
}
}
}
为什么要打印“输入完全合法”?
输入
字符串中显然有一个反勾号,这是在正则表达式中定义的。我是否错误地使用了
matcher.matches()

最后,我希望以下字符被视为“非法”:

`/);[]和:()|-


但是上面的代码对于所有的
输入
排列似乎都失败了,不管我“切换”了哪一个(没有注释掉)。有什么想法吗?

在Java中,如果整个输入字符串与正则表达式匹配,则
.matches()
方法仅返回
True


由于您已经使用了
=~
操作符来创建matcher对象,所以在使用
matcher.matches()
时,只需测试
if matcher
(如图所示)。

整个输入必须与正则表达式“匹配”,因此您必须将正则表达式更改为
/.[`/\[\]&:\()\[\]-.*/

除了使用
=~
创建匹配器对象,然后使用其方法之外,您还可以简单地使用
=~
匹配操作符。(
if(输入==~illNameChars).

或者,您也可以在使用
=~
创建它之后执行
if(matcher).

最后一种选择是保持正则表达式的原样,但使用
if(matcher.find())…
代替,因为
find()
检查正则表达式是否匹配输入字符串的任何子字符串