正则表达的明星不会产生任何匹配

时间:2013-03-06 17:15:18

标签: regex bash

如果记忆服务我曾经能够做到这一点

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

$ echo ${BASH_REMATCH[1]}

你可以看到它没有给出明星*字符的输出。现在它只有在我使用加号+字符时才有效。

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

$ echo ${BASH_REMATCH[1]}
123

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

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

$ echo ${BASH_REMATCH[1]}
123

1 个答案:

答案 0 :(得分:4)

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

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

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

 a b c 123
^ ^ ^  ^..

前三次很乐意匹配空字符串,而第四个位置则匹配数字系列。