4

我正在尝试制作一个正则表达式,它允许使用大小写字母 + 数字创建字符串 - a-zA-z0-9以及字符:.-_

我如何制作这样的正则表达式?

4

2 回答 2

12

以下正则表达式应该是您正在寻找的(下面的解释):

\A[-\w.]*\z

以下字符类应仅匹配您要允许的字符:

[-a-zA-z0-9_.]

您可以将其缩短为以下内容,因为\w等效于[a-zA-z0-9_]

[-\w.]

请注意,要-在您的字符类中包含文字,它必须是第一个字符,否则它将被解释为一个范围(例如[a-d]等同于[abcd])。另一种选择是用反斜杠转义它。

通常.表示除换行符以外的任何字符,您需要对其进行转义以匹配文字句点,但这在字符类中不是必需的。

\A和是字符串开头和结尾的\z锚点,否则您将匹配包含任何允许字符的字符串,而不是包含允许字符的字符串。

*表示零个或多个字符,如果您希望它需要一个或多个字符,请将其更改为*a +

于 2012-05-16T22:49:09.530 回答
4

/\A[\w\-\.]+\z/

  • \w表示字母数字(不区分大小写)和“_”
  • \-表示破折号
  • \.指时期
  • \A表示开始(甚至比 更“强” ^
  • \z意味着结束(甚至比“更强” $

例如:

>> 'a-zA-z0-9._' =~ /\A[\w\-\.]+\z/
=> 0 # this means a match

更新感谢phrogz改进

于 2012-05-16T22:43:18.577 回答