Groovy : 用于匹配字母数字和下划线和破折号的正则表达式

Groovy : RegEx for matching Alphanumeric and underscore and dashes

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

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

示例字符串如下所示:

SDD884MMKG_JJGH1222

到目前为止我想到的是,

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

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

我必须在“$”前加一个“\”,否则编译会报错。

- Groovy:illegal string body character after dollar sign;

任何人都可以建议在 Groovy/Grails 中使用更好的正则表达式吗?

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

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

或更短:

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

通过在字符 class 中间放置一个未转义的 -,您的正则表达式使其表现得像 * (ASCII 42) 和 _ ( ASCII 95), 匹配此范围内的所有内容。

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

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

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

进一步 "shortcuts" 参见 Regular Expressions

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

逆向更容易:

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