この数字がこの正規表現と一致するのはなぜですか?

この数字がこの正規表現と一致するのはなぜですか?

正規表現はです-?([0-9]|([1-9][0-9]))

番号-2231が一致します。私が理解したところによれば、1桁または2桁でなければなりません。この数字がこの正規表現と一致するのはなぜですか?

ベストアンサー1

正規表現は固定されていないため、最初の1つまたは2つの数字を自由に一致させ、「成功」し、次の数字(成功)は一致しないままにします。

1桁または2桁の数字が必要な場合は、正規表現を固定してください。

'^-?([0-9]|([1-9][0-9]))$'

いくつかの例:

$ seq -100 -99 | grep -E '^-?([0-9]|[1-9][0-9])$'
-99

$ seq 99 100 | grep -E '^-?([0-9]|[1-9][0-9])$'
99

$ seq -9 9  | grep -E '^-?([0-9]|[1-9][0-9])$'
-9
-8
-7
-6
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9

$ seq -2231 -100 | grep -E '^-?([0-9]|[1-9][0-9])$'
(empty)

おすすめ記事