Groovy中==~为何无法匹配正确的正则表达式?
问题原因
Groovy里的==~是全字符串匹配运算符,它要求正则表达式必须完全匹配整个目标字符串,而不是仅仅包含匹配内容。你的正则是development,但目标字符串是game-development,显然正则无法覆盖整个字符串,所以匹配失败,输出sad。
你在正则验证工具里看到的匹配是「包含匹配」,和Groovy==~的全匹配逻辑不一样,这就是差异所在。
解决方案
方案1:用包含匹配运算符=~(推荐)
=~会返回一个Matcher对象,调用find()方法就能判断字符串中是否包含正则匹配的内容,同时还能方便捕获分组:
def pattern = ~"development"; def string = "game-development"; def matcher = string =~ pattern; if (matcher.find()) { println("happy, 匹配到的内容:${matcher.group()}") } else { println("sad") }
方案2:修改正则实现全匹配
如果一定要用==~,可以给正则加上首尾通配符,让它覆盖整个字符串,同时用分组捕获目标内容:
def pattern = ~".*(development).*"; def string = "game-development"; if (string ==~ pattern) { def matcher = string =~ pattern; matcher.find(); println("happy, 捕获到的分组:${matcher.group(1)}") } else { println("sad") }
内容的提问来源于stack exchange,提问作者Drunken Janna
相关产品推荐
相关产品推荐

