Regex星星生成不匹配项

vltsax25  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(90)

如果我没记错的话,我以前可以这样做:

$ [[ abc123 =~ ([0-9]*) ]]
   
$ echo ${BASH_REMATCH[1]}

字符串
正如您所看到的,它没有输出星星*字符。现在只有当我使用加号+字符时才有效。

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

$ echo ${BASH_REMATCH[1]}
123

编辑

看到更多的奇怪。它将匹配字符串的开头,但不匹配字符串的结尾。

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

$ echo ${BASH_REMATCH[1]}
123

mzillmmw

mzillmmw1#

正则表达式返回它找到的第一个匹配,即位置0,在“a”之前,它匹配空字符串。
*作为量词是困难的,因为如果这是整个表达式,它能够匹配空字符串,因此它将在没有数字匹配的每个位置上匹配。
所以在字符串“abc123”中匹配了4次!

a b c 123
^ ^ ^  ^..

字符串
前3次它很乐意匹配空字符串,而在第四个位置上它匹配一系列数字。

相关问题