如何改进正则表达式以匹配"special"字母?



我正在使用Ruby on Rails 3.0.9,我正在使用以下正则表达式来验证包含字母,空格和数字的字符串(如果我是对的,它应该匹配那些提到的字符):

/^[ws-]*$/u

我想改进regex也匹配一个字符串,可以包含"特殊"字符字母,例如,', ", %, &, *, @, !, ?, (, ), []我怎么能改变上面的正则表达式,以匹配那些?


我忘记了,在上面的表达式中,我想匹配validate也重音字母,如à, è, é, ì, òù

只需将额外的字符添加到字符类中,同时转义任何在正则表达式字符类(仅[]在您的情况下)中具有特殊含义的字符:

/^[ws'"%&*@!?()[]-]*$/u

还要确保将-放在字符类的末尾或转义(-),以便regex解析器不会认为它指示了一个范围。

如果您还想加入Unicode "word"字符,则将w替换为p{Word}:

/^[p{Word}s'"%&*@!?()[]-]*$/

假设你使用的是1.9。如果你没有使用1.9,那么你应该升级以获得更好的Unicode支持。

Oniguruma的p{}语法(Ruby的1.9 regex引擎)是一个命名属性,听起来像你在寻找"word"属性,所以p{Word}是你的w的替代品。你可能想用p{Space}代替s,而你在它:

/^[p{Word}p{Space}'"%&*@!?()[]-]*$/

关于Oniguruma语法的更多细节可以在这里找到:

http://www.geocities.jp/kosako3/oniguruma/doc/RE.txt

可以转义特殊字符。这个正则表达式:[]将匹配字符串"[]"

看看这个有用的网站:http://www.rubular.com/

你可以构建你的正则表达式并针对字符串测试它。

Edit只需开始将这些转义的特殊字符附加到您的regex中,就像这样:/^['"[]ws-]*$/u在那里我已经附加了它,这样它现在也可以查找单个配额('),双引号(")和方括号([])的任何出现。如果你需要的话,可以继续添加。

最新更新