如果记忆服务我曾经能够做到这一点
$ [[ abc123 =~ ([0-9]*) ]] $ echo ${BASH_REMATCH[1]}
你可以看到它没有给出明星*
字符的输出。现在它只有在我使用加号+
字符时才有效。
$ [[ abc123 =~ ([0-9]+) ]]
$ echo ${BASH_REMATCH[1]}
123
编辑看到更多的陌生感。它将匹配字符串的开头,但不匹配字符串的结尾。
$ [[ 123abc =~ ([0-9]*) ]]
$ echo ${BASH_REMATCH[1]}
123
答案 0 :(得分:4)
你的正则表达式返回它找到的第一个匹配,即位置0,在“a”之前,它匹配空字符串。
*
因为量词是困难的,因为如果这是整个表达式,它就能匹配空字符串,因此它将匹配每个没有数字匹配的位置。
所以在字符串“abc123”中匹配4次!
a b c 123
^ ^ ^ ^..
前三次很乐意匹配空字符串,而第四个位置则匹配数字系列。