Boa*_*ann 45
正则表达式引擎将尝试匹配字符串中每个位置的整个模式,从左到右.该模式在字符串的最开头/a*/成功匹配零as.这就是你的regex101截图中的小点插入符号 - 在该位置的零宽度匹配.它会匹配a那个位置的更多s,但没有.尽管如此,这场比赛是成功的.
如果你使用一个返回字符串中所有正则表达式匹配的函数,那么它每次都会向前移动至少一个字符以寻找新的匹配,所以它aaaa一旦匹配就会匹配(作为单个结果).Python中的示例:
import re
regex = r"a*"
input = "AAAAaaaaBBBBbbbb"
print(re.findall(regex, input))
Run Code Online (Sandbox Code Playgroud)
输出:
['', '', '', '', 'aaaa', '', '', '', '', '', '', '', '', '']
Run Code Online (Sandbox Code Playgroud)
然而,当你使用时/a+/,它不能做那些零宽度匹配,所以它逐步完成输入,直到它找到它的第一个和唯一匹配aaaa.
其他答案已经描述了正在发生的事情.但是对于插图/示例,请尝试以下尺寸:
$ echo AAAAaaaabbbb | egrep -o 'a*' && echo "SUCCESS"
SUCCESS
Run Code Online (Sandbox Code Playgroud)
grep -o选项的作用是仅显示与正则表达式匹配的输入部分.由于匹配恰好是"零字符",结果是空的......但是成功了.