bash:正则表达式不正常

时间:2014-09-12 18:56:32

标签: regex bash

请检查下面的代码,我想标注" -n"和" -n.n"好多少。字符串如" - .n"和" -n。"不是很好的数字。在哪里" n"是" [0-9] +"。

#!/bin/bash
function test_number() {
  if ! ([ -z $2 ]); then
    if [[ ${2:0:1} == "-" ]]; then
      if [[ ${2:1} =~ [0-9]+(\.[0-9]+)? ]]; then
        echo "${2}: good number"
      fi
    else
      echo "$2: string"
    fi
  fi
}

test_number "1" "-x"
test_number "1" "-1"
test_number "1" "-1."
test_number "1" "-2.1"
test_number "1" "-.1"
test_number "1" ".1"
test_number "1" "x"

这是测试结果;错误的案例被标记。

-1: good number
-1.: good number     <== wrong
-2.1: good number
-.1: good number     <== wrong
.1: string
x: string

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

<击>

<击>

这应该有效

^(-[0-9]+)?(\.[0-9]+)?$

<击>

此处^$用于匹配整个字符串/行,分别代表字符串/行的开头和结尾。

以下是更正后的版本

^-?[0-9]+(\.[0-9]+)?$

Online demo

注意:删除?,使其成为减号-的必填项。


点数:

  • 此处减去-应附带一些数字以避免-.n匹配
  • 十进制.应该在某些数字之前,以避免-n.匹配