Bash 正则表达式验证

Bash Regex validation

提问人:Thabo 提问时间:10/13/2023 最后编辑:Thabo 更新时间:10/13/2023 访问量:75

问:

为什么以下正则表达式在以下方面起作用: https://regex101.com/r/nI8xB8/1 但在 bash 脚本中不起作用

^(feature|bugfix|refactor|release|hotfix|other)\/[a-z0-9._-]+\/[a-z0-9._-]+$

带测试字符串

feature/XXXX-23/xxxx-xxxx

但有效feature/no-ref/xx-xxxx

脚本

local_branch="$(git rev-parse --abbrev-ref HEAD)"

valid_branch_regex="^(feature|bugfix|refactor|release|hotfix|other)\/[a-z0-9._-]+\/[a-z0-9._-]+$"

message="\x1B[01;91m Some message. \x1B[0m"

if [[ ! $local_branch =~ $valid_branch_regex ]] 
then
    echo "$message"
    exit 1
 else 
    echo "\x1B[01;92m Your branch name is okay \x1B[0m"
fi
正则表达式 bash

评论

1赞 AdrianHHH 10/13/2023
我认为您需要展示演示问题的 Bash 代码。如前所述,我相信代码应该可以工作。因此,在字符串的构建方式中可能还有其他原因导致了问题。您是否尝试过从 Bash 中使用的正则表达式中删除 or 或两者?^$
3赞 Andrej Podzimek 10/13/2023
在测试字符串中,是大写的,正则表达式只允许小写。您可以设置 Bash 选项,也可以在字符规范中允许。加到一个地方,这计算结果为 true (status): (旁注:斜杠前的反斜杠可能不需要;这看起来像一个转义剩余的表达式(甚至在一个中也可以只使用 e,g. 作为分隔符以避免转义斜杠)。XXXXnocasematchA-ZA-Z0[[ 'feature/XXXX-23/xxxx-xxxx' =~ ^(feature|bugfix|refactor|release|hotfix|other)\/[A-Za-z0-9._-]+\/[a-z0-9._-]+$ ]]sedsed|
1赞 glenn jackman 10/13/2023
或者,将执行不区分大小写的正则表达式匹配。shopt -s nocasematch
3赞 glenn jackman 10/13/2023
@Thabo,必须小心在线正则表达式检查器:bash 使用 POSIX 扩展正则表达式,而不是 PCRE
1赞 GoinOff 10/13/2023
在定义正则表达式时,我总是使用 ' 而不是 “ ,因此没有解释。valid_branch_regex='^(feature|bugfix|refactor|release|hotfix|other)\/[a-z0-9._-]+\/[a-z0-9._-]+$'

答:

1赞 Thabo 10/13/2023 #1

我让它与下面的正则表达式一起使用

valid_branch_regex="^(feature|bugfix|refactor|release|hotfix|other)\/[[:alnum:]._+-]+\/[[:alnum:]._+-]+$"

使用 POSIX 类:和排序规则也允许和:alnum:_-

裁判:

https://en.wikibooks.org/wiki/Regular_Expressions/POSIX_Basic_Regular_Expressions