【问题标题】:Matching a regex expression and storing it匹配正则表达式并将其存储
【发布时间】:2015-07-29 10:02:56
【问题描述】:

我想在一个字符串中搜索一个正则表达式,我这样做如下:

假设 target="string with 1234 in"

if [[ "$target" =~ "{4}\d" ]] then
    val=...
fi

我想捕获找到的正则表达式,即我想要 val=1234。最好的方法是什么?

【问题讨论】:

    标签: regex ksh


    【解决方案1】:

    如果您只查找 4 位数字,您可以使用 /\b\d{4}\b/

    如果您也想捕获 val= 部分,只需为其添加前缀,这样您就有了 /\bval=\d{4}\b/

    最后,如果您不知道val= 部分的val 是什么,请将val 替换为\w+,那么您将拥有/\b\w+=\d{4}\b/

    【讨论】:

      【解决方案2】:

      你的意思是什么。比如val = s/\D(\d\d\d\d)\D/$1/,或者val = /\d{4}/

      【讨论】:

      • 这将在任何 4 位数字上返回 true,是的,5 位数字……和 6……和 7……尽管它会捕获这些数字的前 4 位,但是仍然可能不是他想要的。
      • 哦,是的,你说得对,我修好了第一个
      【解决方案3】:

      匹配的部分保存在 ksh 的 .sh.match 数组中:

      if [[ $target == *{4}(\d)* ]]; then
          val=${.sh.match[1]}
          # do something with $val
      fi
      

      演示:

      $ target="string with 1234 in"
      $ [[ $target == *{4}(\d)* ]] && echo "${.sh.match[1]}"
      1234
      

      【讨论】:

        猜你喜欢
        • 2021-10-13
        • 1970-01-01
        • 1970-01-01
        • 2012-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-04
        相关资源
        最近更新 更多