3

我正在尝试匹配字符串,例如:“+99”、“-82”、“5”、“auto”和“max”==auto 和 max 以及带或不带符号的数字(比如说整数)

我试过正则表达式

var='^([+|-]{0,1}[0-9][0-9]*)|(auto)|(max)$'

但它在“至少 n 次但不超过 m”的事情上失败了,在我的情况下 {0,1} 无论如何我测试了 var='ab{0,1}' 和 var='ab{2}' 而这些不也不行

我没有得到任何进一步的信息,但我认为下一个问题可能是这些:()

我正在使用 #!/bin/bash 版本 4.2.24(1)

提前致谢!

edit1: 我不知道如何将此正则表达式分组按照 Karoly Horvath 的建议工作。我正在使用我在某处找到的这个检查功能。

#!/bin/bash

INTEGER_MAX='^([+-])?[0-9][0-9]*$'

function isNumeric() { 

    check=`echo $1 | sed "s/\($2\)//"`

    if [ -z ${check} ]; then
        return 0
    else
        return 1
    fi
}

isNumeric "$1" "$INTEGER_MAX" && echo "passed"

编辑2 - 已解决

它正在使用

RE='(^([+-])?[0-9]+$)|(^auto$)|(^max$)'

测试

[[ $string =~ $pattern ]] && echo "passed"

谢谢!

4

1 回答 1

5

选择[+|-]器接受一个字符,要么是+ |要么-。您可能的意思是:[+-].

{0,1}is?[0-9][0-9]*is simple 的简写[0-9]+,但当然两者都应该工作。

无论如何,我测试了 var='ab{0,1}' 和 var='ab{2}' 并且这些都不起作用

ab{0,1}表示aor ab,量词作用于最后一个表达式,通常是一个字符或一个选择器,如果你想将量词应用于你必须对它进行分组的表达式。

如果您还有其他问题,请发布您如何使用正则表达式,因为我不确定您的问题是什么......

于 2012-05-07T17:52:17.787 回答