如何匹配可以包含的文本 - 或使用正则表达式的下划线?

时间:2009-10-25 15:27:58

标签: regex perl

我希望用户名是包含_-的任何字符,但Perl中的这个字符不起作用,为什么会这样?

if ("kunjaaN-" =~ /^[a-zA-Z-_]{1,7}$/)
{ print "equal" ; }

2 个答案:

答案 0 :(得分:10)

它不起作用,因为kunjaaN-是八个字符,你将自己限制在1..7

对于用户名,为什么不将限制增加到合适的位置?

此外,如果您想要包含_,则需要将其包含在角色类中。

试试这个正则表达式:

^[a-zA-Z_-]{1,16}\z


注意:
在字符类内部,-字符可以具有特殊含义。例如,[a-z]表示'以a开头并以z'结尾的字符范围,而[az-]表示'a或{{1} }或z'。

要使-非特殊,您可以将其放在类的开头或结尾,或者使用反斜杠将其转义。 -将与[a\-z]az匹配 逃避通常是首选,因为如果无意中将额外的字符添加到课程的末尾,它可以避免意外。

答案 1 :(得分:4)

如果您不想在字符串末尾允许可能的换行符,请使用\ z end of string anchor而不是$ anchor:

 /^[a-z_-]{1,8}\z/i