正規表示式匹配

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 …