正则表达式匹配行尾

史蒂夫

我正在寻找BASH正则表达式从以下命令中提取“ db”聚合。但是,不能保证参数的顺序。由于某种原因,我无法使其完全工作。

到目前为止我有什么

regex="--db (.*)($| --)"
[[ $@ =~ $regex ]]
DB_NAMES="${BASH_REMATCH[1]}"

# These are example lines
somecommand --db myDB --conf /var/home # should get "myDB"
somecommand --db myDB anotherDB manymoreDB --conf /home # should get "myDB anotherDB manymoreDB" 
somecommand --db myDB # should get "myDB"
somecommand --db myDB anotherDB # should get "myDB anotherDB"

关于正则表达式有什么建议吗?

缺氧

的问题是,bash使用的香料regex不包括非贪婪重复操作符(*?+?)。因为*是贪婪的,并且无法告诉它不要贪婪,所以第一个带括号的子表达式((.*))会匹配所有内容,直到行尾。

如果您知道要捕获的值不包含某个字符并替换.为排除该字符的字符类,则可以解决此问题

例如,如果之后的值--db不包含破折号(-),则可以使用以下命令regex

regex='--db ([^-]*)($| --)'

它与问题中张贴的所有示例匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章