【发布时间】:2017-07-11 11:52:11
【问题描述】:
有一个字符串示例
"j2sdk/1.8.0_25-static j2sdk/1.8.0_45 j2sdk/1.8.0_p120 j2sdk/1.8.0_40 j2sdk/1.8.0_51"
我想找到与格式j2sdk/1.8.0_xxx匹配的,但xxx只有数字,这里我想匹配下面的字符串
j2sdk/1.8.0_45
j2sdk/1.8.0_40
j2sdk/1.8.0_51
我写了下面的代码,但是运行时,它只得到第一个匹配的j2sdk/1.8.0_45,我的代码有什么问题吗?
avail_versions="j2sdk/1.8.0_25-static j2sdk/1.8.0_45 j2sdk/1.8.0_p120 j2sdk/1.8.0_40 j2sdk/1.8.0_51"
patern='j2sdk\/1\.8\.0_[0-9]+\s+'
if [[ $avail_versions =~ $patern ]];then
echo matched
echo ${BASH_REMATCH[0]}
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
fi
结果是BASH_REMATCH[0]为j2sdk/1.8.0_45,BASH_REMATCH[1]和[2]为空
我希望我能在BASH_REMATH[1],BASH_REMATH[2],BASH_REMATH[3] 得到它们。
在 Bash 中是否有其他方法可以获得预期的匹配项。
谢谢
【问题讨论】:
-
您需要获取多个匹配项,而不是在不存在的组中查找内容(您的模式没有任何组,只有组 0,整个匹配项被初始化)。见this demo。
-
检查this snippet with
grep是否适合您。