正则表达式中的[-az]和[az]有什么区别?

正则表达式中的[-az]和[az]有什么区别?

-正则表达式中的[ az] 和 [az] 有什么区别? [ -az]中的第一个减号是什么意思?

默认情况下/etc/adduser.conf(例如):

#check user and group names also against this regular expression.`
#NAME_REGEX="^[a-z][-a-z0-9_]*\$" 

答案1

仅当连字符不是方括号字符类中的第一个或最后一个字符时,它才具有特殊含义。

[a-z]a匹配从到 的所有 ASCII 小写字母z。匹配从到 的[-a-z]所有 ASCII 小写字母az 连字符-

Perl 文档中记录了这一点:

在列表中,“-”字符指定字符范围,因此 az 表示“a”和“z”(含)之间的所有字符。如果您希望“-”或“]”本身成为类的成员,请将其放在列表的开头(可能在“^”之后),或使用反斜杠将其转义。当“-”位于列表末尾、就在结束符“]”之前时,也按字面意思理解。

答案2

开头的减号用于将文字减号字符包含在组中。它也可能位于该组的末尾。比较:

$ echo abc- | grep [w-x]

$ echo abc- | grep [w-x-]
abc-
$ echo abc- | grep [-w-x]
abc-

当它不在开头或结尾时,它的功能是描述一个范围,如 中w-x

相关内容