Я пытаюсь сделать regex выражение, которое проверит число, которое находится в диапазоне-100 к 100. Я сделал это regex выражение: (^-[1-100] * | ^ [0-100] *), но это не работает как ожидалось.
Я ищу шаблон числа в строке, не только число отдельно.
сценарий:
#!/bin/bash
check(){
input="test1.txt"
while read -r line; do
a=( $line )
for i in "${a[@]:1}"; do
if [[ "$i" =~ (^-[1-100]*|^[0-100]*) ]]; then
echo "$i"
fi
done
done < "$input"
}
check
входной файл:
add $s0 $s1 $s3
sub $s0 $s1
addi $s1 $s2 76
lw $s2 -50($s2)
фактический результат: добавьте $s0$s1$s3 sub $s0$s1 addi 76$s1$s2 lw $s2-50 ($s2)
ожидаемый результат: 76 - 50 ($s2).
Выражение [0-100]
не диапазон целых чисел; это - ряд символов, который, оказывается, включает диапазон 0-1
(так соответствия 0
или 1
или 0
или 0
).
Соответствовать диапазону целых чисел -100
кому: 100
, Вы могли использовать:
[0-9]
; дополнительно сопровождаемый[0-9]
или
100
все, которым предшествует дополнительный знак. Так
^[-+]?([0-9][0-9]?|100)$
Напр.
while read num; do
[[ $num =~ ^[-+]?([0-9][0-9]?|100)$ ]] && echo "$num is valid" || echo "$num is invalid"
done
-101
-101 is invalid
-100
-100 is valid
-83
-83 is valid
22
22 is valid
100
100 is valid
102
102 is invalid
^C