1

如果没记错的话,我曾经能够做到这一点

$ [[ abc123 =~ ([0-9]*) ]]

$ 回声 ${BASH_REMATCH[1]}

正如你所看到的,它没有给出带有星号的输出*。现在它只有在我使用加号时才有效+

$ [[ abc123 =~ ([0-9]+) ]]

$ echo ${BASH_REMATCH[1]}
123

编辑看到更多的陌生感。它将匹配字符串的开头,但不匹配字符串的结尾。

$ [[ 123abc =~ ([0-9]*) ]]

$ echo ${BASH_REMATCH[1]}
123
4

1 回答 1

4

您的正则表达式返回它找到的第一个匹配项,即位置 0,在“a”之前,它与空字符串匹配。

*因为量词很难,因为如果那是整个表达式,它能够匹配空字符串,因此它将匹配每个没有数字匹配的位置。

所以在字符串“abc123”中匹配了 4 次!

 a b c 123
^ ^ ^  ^..

前 3 次很高兴匹配空字符串,第四次匹配数字系列。

于 2013-03-06T17:18:15.590 回答