正则表达式匹配

pat='[^0-9]+([0-9]+)'
s='I am a string with some digits 1024'
[[ $s =~ $pat ]] # $pat must be unquoted
echo "${BASH_REMATCH[0]}"
echo "${BASH_REMATCH[1]}"

输出:

I am a string with some digits 1024
1024

我们也可以这样做,而不是将正则表达式赋值给变量($pat):

[[ $s =~ [^0-9]+([0-9]+) ]]

说明

  • [[ $s =~ $pat ]] 构造执行正则表达式匹配
  • 捕获的组即匹配结果在名为 BASH_REMATCH 的数组中可用 **
  • BASH_REMATCH 数组中的第 0 个索引是总匹配
  • 第 i 个指数中 BASH_REMATCH 阵列是第 i 个捕获基团,其中 = 1,2,3 …