正则表达式匹配行尾

前端之家收集整理的这篇文章主要介绍了正则表达式匹配行尾前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找BASH正则表达式从下面的命令中拉出’db’agruments.但是,不保证参数的顺序.出于某种原因,我无法让它完全发挥作用.

到目前为止我有什么

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使用的是一种不包含非贪婪重复运算符(*?,?)的正则表达式.因为*是贪婪的并且没有办法告诉它不贪婪,所以第一个带括号的子表达式((.*))匹配到行尾的所有内容.

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

例如,如果–db之后的值不包含破折号( – ),则可以使用此正则表达式:

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

它匹配问题中发布的所有示例.

猜你在找的正则表达式相关文章