【问题标题】:Why does my regex match substrings instead of the full string?为什么我的正则表达式匹配子字符串而不是完整字符串?
【发布时间】:2020-12-08 04:41:08
【问题描述】:

我有这个脚本:

#!/bin/bash
a=`git rev-parse --abbrev-ref HEAD`
echo $a
if [[ "$a" =~ release* ]]; then
    echo "not valid branch allowed to be created"
    exit 1
fi

我想要实现的是,只有当 a 的值以字符串 release 开头时,脚本才会以状态 1 退出。

我想确保针对始终以字符串 release 开头并且之后可以包含任何其他字符或数字或特殊字符的正则表达式验证 a 的值。但是,我在脚本中看到,如果 a 在其值的任何位置包含字符串 release,脚本仍将其与正则表达式匹配并在 echo 下打印该值。

如何在此处获取正则表达式?

【问题讨论】:

    标签: bash shell


    【解决方案1】:

    您需要将 RE 锚定为仅匹配字符串的开头。你也不希望最后出现*;这意味着 匹配 0 个或多个先前的东西,在这种情况下是一个 e。

    [[ "$a" =~ ^release ]]
    

    您也可以使用 glob 模式代替正则表达式:

    [[ "$a" = release* ]]
    

    【讨论】:

    • 谢谢我实际上想出了使用 if [[ "$a" == release* ]]
    【解决方案2】:

    我对 Bash 正则表达式支持不是很熟悉,但 this 的帖子可能会有所帮助,并且还有一些其他最佳实践技巧。

    除此之外,您不需要插入符号来匹配字符串的开头吗?此外,任何后续字符都是句点星号(即句点是任何一个字符,星号是前一个字符的零个或多个)。

        ^release.*
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2014-12-31
      • 2022-01-17
      相关资源
      最近更新 更多