如果我没记错的话,我以前可以这样做:
$ [[ abc123 =~ ([0-9]*) ]]
$ echo ${BASH_REMATCH[1]}
字符串
正如您所看到的,它没有输出星星*
字符。现在只有当我使用加号+
字符时才有效。
$ [[ abc123 =~ ([0-9]+) ]]
$ echo ${BASH_REMATCH[1]}
123
型
编辑
看到更多的奇怪。它将匹配字符串的开头,但不匹配字符串的结尾。
$ [[ 123abc =~ ([0-9]*) ]]
$ echo ${BASH_REMATCH[1]}
123
型
1条答案
按热度按时间mzillmmw1#
正则表达式返回它找到的第一个匹配,即位置0,在“a”之前,它匹配空字符串。
*
作为量词是困难的,因为如果这是整个表达式,它能够匹配空字符串,因此它将在没有数字匹配的每个位置上匹配。所以在字符串“abc123”中匹配了4次!
字符串
前3次它很乐意匹配空字符串,而在第四个位置上它匹配一系列数字。