次の正規表現がvalid
を出力するのはなぜですか 、名前がhdpworker01
の場合 ?
name=hdpworker01
[[ $name =~ worker[[:digit:]] ]] && echo valid
私がやろうとしているのは、valid
を印刷することです 名前がworker[0-999]
と一致する場合のみ 。
期待される結果の例:
-
name=worker01
の場合 :valid
-
name=hdpworker01
の場合 :出力なし
承認された回答:
正規表現は、デフォルトでは文字列の先頭または末尾に固定されていません。これは、たとえばファイル名のグロブパターン。これは、式が指定された文字列のどこにでも一致する可能性があることを意味します。
式を文字列の先頭に固定するには、
を使用します。^worker[[:digit:]]
さらに文字列の末尾に固定し、1〜3桁の数字を使用できるようにするには、
を使用します。^worker[[:digit:]]{1,3}$
worker10
と一致させたい場合 ただし、worker01
ではありません またはworker003
(ゼロで埋められた数字はありません)、使用
^worker([0-9]|[1-9][0-9]{1,2})$