bash 中 =~ 的奇怪行为

bash 中 =~ 的奇怪行为

因此,我这样做:

[[ 'Comment 1: abcas'  =~ '(?:Comment [0-9]*: )(.*)' ]]

该正则表达式在许多在线正则表达式测试器和 js 中运行良好,但在 bash 中无法工作。无论如何,修改我的正则表达式以abcas从中提取

‘评论 1:abcas’

答案1

根据Bash 手册

还有一个额外的二元运算符“=~”,其优先级与“==”和“!=”相同。使用时,运算符右侧的字符串被视为扩展正则表达式并进行相应匹配(就像 regex3 一样))。如果字符串与模式匹配,则返回值为 0,否则返回值为 1。如果正则表达式语法不正确,则条件表达式的返回值为 2。如果启用了 nocasematch shell 选项(请参阅 Shopt Builtin 中对 shopt 的描述),则匹配时不考虑字母的大小写。可以引用模式的任何部分,以强制将引用的部分匹配为字符串。

因此,正则表达式周围的引号会导致整个正则表达式被视为纯字符串匹配。此外,正则表达式有很多种,并且?:不支持regex(3)——不幸的是,您只需查看手册即可了解特定工具支持什么风格。

在你的具体情况下,你可以使用类似

$ [[ 'Comment 1: abcas' =~ (Comment [0-9]*: )(.*) ]] && echo ${BASH_REMATCH[2]}
abcas

相关内容