加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

正则表达式匹配行尾

发布时间:2020-12-14 05:37:35 所属栏目:百科 来源:网络整理
导读:我正在寻找BASH正则表达式从下面的命令中拉出’db’agruments.但是,不保证参数的顺序.出于某种原因,我无法让它完全发挥作用. 到目前为止我有什么 regex="--db (.*)($| --)"[[ $@ =~ $regex ]]DB_NAMES="${BASH_REMATCH[1]}"# These are example linessomecom
我正在寻找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 ([^-]*)($| --)'

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读