因此,我这样做:
[[ '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