bash正则之BASH_REMATCH

bash正则之BASH_REMATCH偶然间发现了这个东西 可以获取捕获组 如 root localhost 123 456 abc 000 0 9 root localhost echo BASH REMATCH 1 123 可以看到 只输出了一个匹配 理论上来说共有 3 个 要输出所有的 可以这样 来自 https unix stackexchang

偶然间发现了这个东西, 可以获取捕获组。

如:

[root@localhost ~]# [[ '123,456,abc,000' =~ ([0-9]+) ]] [root@localhost ~]# echo ${ 
   BASH_REMATCH[1]} 123 

可以看到, 只输出了一个匹配, 理论上来说共有3个。

要输出所有的, 可以这样(来自: https://unix.stackexchange.com/questions//bash-regex-capture-group):

[root@localhost ~]# global_rematch() { 
    > local s=$1 regex=$2 > while [[ $s =~ $regex ]]; do > echo "${BASH_REMATCH[1]}" > s=${ 
   s#*"${BASH_REMATCH[1]}"} > # echo "s=$s" # 调试输出 > done > } [root@localhost ~]# global_rematch '123,456,abc,000' '([0-9]+)' 123 456 000 

其中 ${s#*"${BASH_REMATCH[1]}"}是删除刚刚匹配的及其左边的部分。
打开注释可以看到如下结果:

[root@localhost ~]# global_rematch '123,456,abc,000' '([0-9]+)' 123 s=,456,abc,000 456 s=,abc,000 000 s= 

之前一篇文章写过相关的, 可以看Bash中的字符串截取.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205488.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:54
下一篇 2026年3月19日 下午5:54


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号