【发布时间】:2012-05-07 17:40:06
【问题描述】:
我正在尝试匹配字符串,例如:“+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)
提前致谢!
编辑1: 我不知道如何将这个正则表达式分组为 ? 按照 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"
edit2 - 已解决
它正在使用
RE='(^([+-])?[0-9]+$)|(^auto$)|(^max$)'
经过测试
[[ $string =~ $pattern ]] && echo "passed"
谢谢!
【问题讨论】:
-
你还没有告诉我们你是如何使用正则表达式的。不同的命令需要不同的正则表达式语法。
-
您使用的是 Bash 正则表达式匹配运算符
[[ $string =~ $pattern ]]或grep还是什么? -
为什么不用
if [[ $1 =~ ^[+-]?[0-9]+$ ]] || [[ $1 =~ ^max$ ]] || [[ $1 =~ ^auto$ ]]之类的东西来替换看起来很复杂的函数