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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Groovy:RegEx用于匹配字母数字和下划线和短划线相关的知识,希望对你有一定的参考价值。

我正在研究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})。因为这些所谓的GStrings只是处理,如果字符串用"-chars写在它周围,你必须做额外的转义。

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

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

请参阅Regular Expressions以获取更多“快捷方式”。

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

另一答案

反转它更容易:

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

以上是关于Groovy:RegEx用于匹配字母数字和下划线和短划线的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式regex

如何写匹配任意个26个大小写字母,数字和下划线的Java正则表达式呢?

正则表达式Regex

RegEx(在 JavaScript 中查找/替换) - 匹配非字母数字字符但忽略 - 和 +

Java 正则表达式 限定字符串中只能包含字母,数字和连接符- 怎么写?

python正则表达式及RE模块