Отрицательный к положительному числу располагаются в regex в сценариях удара

Я пытаюсь сделать 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).

1
задан 29 March 2019 в 14:57

1 ответ

Выражение [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
1
ответ дан 7 December 2019 в 15:05

Другие вопросы по тегам:

Похожие вопросы: