【问题标题】:bash regex doesnt match "at least n times but not more than m"bash 正则表达式不匹配“至少 n 次但不超过 m”
【发布时间】: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$ ]]之类的东西来替换看起来很复杂的函数

标签: regex bash shell


【解决方案1】:

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

{0,1} 的简写是 ?[0-9][0-9]* 就是 [0-9]+,当然两者都可以。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多