在 bash 中,我试图用这个正则表达式捕获这些组,但 BASH_REMATCH 给我空结果
RESULT="1730624402|1*;[64452034;STOP;1730588408;74;22468;1"
regex="([[:digit:]]+)?|([[:digit:]])*;\[([[:digit:]]+)?;STOP;([[:digit:]]+)?;"
if [[ "$RESULT" =~ $regex ]]
then
echo "${BASH_REMATCH}" # => 1730624402
echo "${BASH_REMATCH[1]}" # => 1730624402
echo "${BASH_REMATCH[2]}" # EMPTY
echo "${BASH_REMATCH[3]}" # EMPTY
echo "${BASH_REMATCH[4]}" # EMPTY
else
echo "check regex"
fi
我哪里出错了?
提前致谢
RESULT
包含文字字符 |
和 *
。 这两个字符在正则表达式中具有特殊含义,因此需要对其进行转义。
对OP的一项修改
regex
:
regex="([[:digit:]]+)\|([[:digit:]])\*;\[([[:digit:]]+)?;STOP;([[:digit:]]+);"
试驾:
[[ "$RESULT" =~ $regex ]] && typeset -p BASH_REMATCH
declare -a BASH_REMATCH=([0]="1730624402|1*;[64452034;STOP;1730588408;" [1]="1730624402" [2]="1" [3]="64452034" [4]="1730588408")
注意: OP(还)没有说明
BASH_REMATCH[]
所需的内容,所以此时我猜测这是正确的