最近我一直在研究正则表达式,发现运算符“?”可以使“*”、“+”或“?”成为惰性匹配。我的问题是它是如何做到的?是因为“*?”是一个特殊的运算符,还是“?”对“*”产生了影响?换句话说,正则表达式是否将“*?”识别为一个运算符本身,还是将“*?”识别为两个单独的运算符“*”和“?”?如果“*?”被识别为两个单独的运算符,那么“?”如何影响“*”使其变得惰性呢?如果“?”意味着“*”是可选的,那么这不应该意味着“*”根本不需要存在吗?如果是这样,在语句“.*?”中,正则表达式难道不会只匹配单个字母和整个字符串而不是较短的字符串吗?请解释一下,我急需理解。非常感谢。
{n,m}?
语法? - PP.?
量词,它相当于{0,1}
量词,就像*
相当于{0,}
一样。你不能像那样链接量词;这是语法错误。在*?
中的?
似乎是一个量词修饰符或者(大多数文档都这么说),*?
只是另一个像*
一样工作但更懒惰的量词。 - Joey?
会成为量词修饰符。这将意味着在*?
中,*
不必存在。在使用正则表达式<.*?>
搜索<abcda><avfd>
时,这将意味着*
存在或不存在,这将意味着<.*?>
= <.
> 或 <.*
>。在搜索中,这将默认为<.*>
,这将意味着<abcda><avfd>
将是一个有效的匹配。 - Uriel Katz{n,m}?
。请参见风格比较。 - Martin Ender