我注意到有三种不同的量词类别:贪婪(greedy)、懒惰(即非贪婪)和占有(possessive)。
我知道,粗略地说,贪婪量词会尝试通过先读取整个输入字符串,然后逐个截断字符(如果尝试失败)来获取最长匹配;懒惰量词会尝试通过先读取空字符串,然后逐个添加字符(如果尝试失败)来获取最短匹配;占有量词会像贪婪量词一样尝试,但如果第一次尝试失败就停止匹配。
但是,我不确定上述内容是如何'内部实现'的,希望能够得到澄清(最好附有示例)。
例如,假设我们有输入字符串
如果正则表达式为
如果我用
如果一个正则表达式中有多个量词,引擎会如何处理优先级(如果这很重要的话)?
提前感谢!
我知道,粗略地说,贪婪量词会尝试通过先读取整个输入字符串,然后逐个截断字符(如果尝试失败)来获取最长匹配;懒惰量词会尝试通过先读取空字符串,然后逐个添加字符(如果尝试失败)来获取最短匹配;占有量词会像贪婪量词一样尝试,但如果第一次尝试失败就停止匹配。
但是,我不确定上述内容是如何'内部实现'的,希望能够得到澄清(最好附有示例)。
例如,假设我们有输入字符串
"fooaaafoooobbbfoo"
。如果正则表达式为
"foo.*"
(贪婪),那么正则表达式中的foo
首先与输入字符串中的foo
匹配,然后.*
将aaafoooobbbfoo
作为'整个字符串'读入吗?还是.*
首先读入fooaaafoooobbbfoo
作为'整个字符串',然后截断fooaaafoooobbbfoo
来尝试匹配正则表达式中的foo
?如果是后者,在每次尝试中,fooaaafoooobbbfoo
会从其左侧还是右侧被截断?如果我用
".*foo"
或"foo.*foo"
替换我的正则表达式,上述问题的答案是否会改变?如果我将那些贪婪量词改为懒惰量词和占有量词呢?如果一个正则表达式中有多个量词,引擎会如何处理优先级(如果这很重要的话)?
提前感谢!