【问题标题】:bash get a regular expression number up to 2 digitsbash 获取最多 2 位的正则表达式数字
【发布时间】:2013-11-08 16:45:47
【问题描述】:

我只需要知道如何制作一个接受最多 2 位数字的正则表达式

我现在只有

^[0-9]{2}$

这将匹配一个正好有 2 位数字的数字,但我不知道如何指定“匹配一个最多有 2 位数字的数字”。

另外,如果有办法确保这个数字不为 0,那将是一个加号,否则我可以使用 Bash 进行检查。

谢谢! :)

注意输入变量来自于read -p "make a choice" Number

编辑我的帖子 - 在上下文中显示代码:

while true; do
    read -p "Please key in the number of the engineer of your choice, or leave empty to select them all: " Engineer
    if [ -z "$Engineer" ]; then
        echo "No particular user specified, all engineers will be selected."
        UserIdSqlString="Transactions.Creator!=0 "
        break
    else
        if [[ $Engineer =~ ^[0-9]{1,2}$ && $Engineer -ne 0 ]]; then
            echo "If you want a specific engineer type their number otherwise leave blank"  
        else
            echo "yes"
            break
        fi
    fi
done

【问题讨论】:

  • 你使用的是grepsed 还是什么?
  • 我已经编辑了我的帖子。我根本不介意涉及 grep 或 sed :)
  • @Bluz,你有 if-else 倒退。 if [[ $Engineer =~ ^[0-9]{1,2}$ && $Engineer -ne 0 ]]; Engineer 中设置了非零两位数时返回 true,因此 echo "yes" 应遵循此
  • 大声笑我是一个甜甜圈...表明我需要喝咖啡休息时间!谢了哥们! :)
  • Engineer 的值为0809 时,您的测试仍然有问题。请在下面 1_CR 的回答中查看我的评论。

标签: regex bash digit


【解决方案1】:

bash [[ 条件表达式支持扩展正则表达式。

[[ $number =~ ^[0-9]{,2}$ && $number -ne 0 ]]

或者正如无与伦比的 @gniourf_gniourf 在他的 cmets 中指出的那样,正确处理前导零的数字需要以下内容

[[ $number =~ ^[0-9]{,2}$ ]] && ((number=10#$number))

【讨论】:

  • 我不知道!非常感谢 ! :D
  • mmmhhh....似乎不起作用:(我可以加一个零。请注意,变量来自 read -p 。我不知道这是否相关,但我会编辑我的问题以防万一。
  • 请注意,当number 的值为0809 时,此解决方案将被破坏,因为在检查$number -ne 0 时,bash 将尝试解释0809 作为基数 8 中的数字(因为以 0 为前缀),这将引发错误。
  • 也许[[ $number =~ ^[[:digit:]]{1,2}$ ]] && ((number=10#$number)) 会更好:它会将基数10 中的值分配给number,即使有前导零,同时检查它是否不为零。 :)
  • @gniourf_gniourf,期待您在bash 上的书 ;-) 纳入答案
【解决方案2】:

-_- 一直在寻找这个 20 分钟,并在我发布这个后立即找到了答案...^[0-9]{1,2}$

【讨论】:

    【解决方案3】:
    ^([1-9]|[1-9]{1}[0-9]{1})$
    

    匹配 1,2,3...99 中的每个数字

    【讨论】:

      【解决方案4】:
      #!/bin/bash
      if [ "$1" -gt 0 ] 2>/dev/null ;then 
          echo "$1 is number." 
      else 
          echo 'no.' 
      fi 
      

      【讨论】:

        猜你喜欢
        • 2023-01-18
        • 1970-01-01
        • 1970-01-01
        • 2021-10-08
        • 1970-01-01
        • 2021-03-26
        • 1970-01-01
        • 1970-01-01
        • 2015-08-28
        相关资源
        最近更新 更多