我正在研究Grails 1.3.6应用程序。我需要使用正则表达式来查找匹配的字符串。
它需要查找字符串是否包含除字母数字字符或“ - ”或“_”或“*”以外的任何字符串
示例字符串如下所示:
SDD884MMKG_JJGH1222
到目前为止我想出的是,
String regEx = "^[a-zA-Z0-9*-_]+\$"
上面的问题是它不会在字符串的结尾或开头搜索特殊字符。
我必须在“$”之前添加一个“\”,否则会产生编译错误。
- Groovy:illegal string body character after dollar sign;
任何人都可以建议在Groovy / Grails中使用更好的RegEx吗?
问题是在字符类中间未转义的连字符。使用以下方法修复它:
String regEx = "^[a-zA-Z0-9*_-]+\$";
甚至更短:
String regEx = "^[\\w*-]+\$";
通过将未转义的-
放置在字符类的中间,你的正则表达式使其行为类似于*
(ASCII 42)和_
(ASCII 95)之间的范围,匹配此范围内的所有内容。
在Groovy中,字符串中的$
字符用于处理替换(例如Hello ${name}
)。因为这些所谓的GString
s只是处理,如果字符串用"
-chars写在它周围,你必须做额外的转义。
Groovy还允许使用'
(单引号)围绕它们来编写没有该功能的字符串。然而,获得正则表达式的最简单方法是使用/
的语法。
assert "SDD884MMKG_JJGH1222" ==~ /^[a-zA-Z0-9*-_]+$/
请参阅Regular Expressions以获取更多“快捷方式”。
来自@anubhava的其他观点仍然有效!
反转它更容易:
String regEx = "^[^a-zA-Z0-9\\*\\-\\_]+\$" /* This matches everything _but_ alnum and *-_ */