Groovy:RegEx用于匹配字母数字和下划线和短划线

时间:2015-02-18 19:41:34

标签: regex grails groovy

我正在研究Grails 1.3.6应用程序。我需要使用正则表达式来查找匹配的字符串。

需要查找字符串是否包含除字母数字字符或“ - ”或“_”或“*”之外的任何内容

示例字符串如下所示:

SDD884MMKG_JJGH1222

到目前为止我想出的是,

String regEx = "^[a-zA-Z0-9*-_]+\$"

上面的问题是它不会在字符串的结尾或开头搜索特殊字符。

我必须在“$”之前添加“\”,否则会产生编译错误。

- Groovy:illegal string body character after dollar sign;

有人可以建议在Groovy / Grails中使用更好的RegEx吗?

3 个答案:

答案 0 :(得分:5)

问题是在字符类中间未转义的连字符。使用以下方法修复它:

String regEx = "^[a-zA-Z0-9*_-]+\$";

甚至更短:

String regEx = "^[\\w*-]+\$";

通过在字符类中间放置一个未转义的-,你的正则表达式使它的行为类似于*(ASCII 42)和_(ASCII 95)之间的范围,匹配所有内容在这个范围内。

答案 1 :(得分:4)

在Groovy中,字符串中的$字符用于处理替换(例如Hello ${name})。由于这些所谓的GString仅被处理,如果字符串用" - 字符围绕它编写,则必须进行额外的转义。

Groovy还允许使用'(单引号)围绕它们来编写没有该功能的字符串。然而,获得正则表达式的最简单方法是/的语法。

assert "SDD884MMKG_JJGH1222" ==~ /^[a-zA-Z0-9*-_]+$/

请参阅Regular Expressions了解更多"快捷方式"。

@anubhava的其他观点仍然有效!

答案 2 :(得分:0)

更容易反转它:

String regEx = "^[^a-zA-Z0-9\\*\\-\\_]+\$" /* This matches everything _but_ alnum and *-_ */