正規表現の[-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。 fromから[-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

関連情報