匹配正则表达式并存储它

Matching a regex expression and storing it

我想在字符串中搜索正则表达式,我这样做如下:

假设目标="string with 1234 in"

if [[ "$target" =~ "{4}\d" ]] then
    val=...
fi

我想捕获找到的正则表达式,即我想要 val=1234。最好的方法是什么?

如果您只想查找 4 位数字,则可以使用 /\b\d{4}\b/

如果您还想捕获 val= 部分,只需在前面加上前缀,这样您就可以得到 /\bval=\d{4}\b/

最后,如果您不知道 val= 部分的 val 是什么,请将 val 替换为 \w+,然后你会有 /\b\w+=\d{4}\b/

你的意思是……像 val = s/\D(\d\d\d\d)\D//val = /\d{4}/ ?

匹配的部分保存在 ksh 中的 .sh.match 数组中:

if [[ $target == *{4}(\d)* ]]; then
    val=${.sh.match[1]}
    # do something with $val
fi

演示:

$ target="string with 1234 in"
$ [[ $target == *{4}(\d)* ]] && echo "${.sh.match[1]}"
1234