Regex Groovy matcher.matches似乎不适用于有效的正则表达式
我之前问过一个类似的问题,但我没有使用Groovy/Java8Regex/pattern/MatcherAPI的不同部分 Groovy 2.4在这里: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
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()
检查正则表达式是否匹配输入字符串的任何子字符串