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

unj*_*nj2 0 regex perl

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

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

Pet*_*ton 10

它不起作用,因为kunjaaN-是8个字符,你只限于1..7

对于用户名,为什么不将限制增加到体面的东西?

此外,如果您想要_包含,则需要在角色类中包含它.

试试这个正则表达式:

^[a-zA-Z_-]{1,16}\z
Run Code Online (Sandbox Code Playgroud)


注意:
在字符内部类中,-字符可以具有特殊含义.例如,[a-z]表示'以'开头a和结尾z' 的字符范围,同时[az-]表示' a或者z-' 或'.

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

  • 这很尴尬.谢谢. (4认同)
  • 是的,但并非我们所有人都在询问下划线在正则表达式中的作用;-) (3认同)
  • EmFi,注意编辑时间 - 问题在我回答之后被修改了.由于问题现在已经改变,我将添加关于`-`何时特殊的信息. (2认同)