Bash 脚本中正则表达式中的负数到正数范围

Bash 脚本中正则表达式中的负数到正数范围

我正在尝试制作一个正则表达式来验证 -100 到 100 范围内的数字。我制作了这个正则表达式:(^-[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)

实际结果: add $s0 $s1 $s3 sub $s0 $s1 addi $s1 $s2 76 lw $s2 -50($s2)

预期结果:76 -50($s2)。

答案1

表达式[0-100]不是整数范围;它是恰好包含范围的一组字符0-1(因此匹配0100)。

为了将整数范围匹配-100100,您可以使用:

  • 十进制数字[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

相关内容