量词*?
的这种组合是什么意思?
将此用作以下示例:
([0-9][AB]*?)
答案 0 :(得分:5)
这是一场非贪婪的比赛。在[AB]*?
中,正则表达式根据需要查找少量[AB]
,以使整个正则表达式与搜索到的字符串匹配,而贪婪版本[AB]*
查找尽可能多的出现次数。它是Perl的regexes的一个特性,因此可以在PCRE(Perl兼容正则表达式)(参见repetition)和其他系统中查看Perl的定义。
PCRE页面给出了一个例子:
[贪婪]给出问题的典型例子是尝试匹配C程序中的注释。它们显示在
/*
和*/
之间,在评论中,可能会显示单个*
和/
个字符。尝试通过应用模式来匹配C注释:/\*.*\*/
到字符串
/* first comment */ not comment /* second comment */
失败,因为由于
.*
项的贪婪,它匹配整个字符串。如果量词后跟一个问号,它就不再贪婪了,而是匹配可能的最小次数,所以模式
/\*.*?\*/
对C评论做了正确的事。
答案 1 :(得分:2)
乔纳森已经解释了这个区别,但这里有一个例子可以帮助你理解这里发生的事情。
给出字符串“9AB”:
([0-9][AB]*?)
仅匹配“9A”,因为只要“A”匹配(懒惰)就会停止
([0-9][AB]*)
匹配整个字符串(“9AB”),因为它消耗“A”并成功匹配以下“B”(贪婪)
请注意,第二个匹配一个数字,后跟零个或多个(无限制)数字“A”或“B”。