更新时间:2023-02-19 23:37:14
我看不到任何不一致之处. regex_match
尝试匹配整个字符串,所以s?/.+?/g?
延迟扩展直到覆盖整个字符串.
I don't see any inconsistency. regex_match
tries to match the whole string, so s?/.+?/g?
lazily expands till the whole string is covered.
这些图"(用于regex_search
)有望帮助人们获得贪婪的想法:
These "diagrams" (for regex_search
) will hopefully help to get the idea of greediness:
Non-greedy:
a.*?a: ababa
a|.*?a: a|baba
a.*?|a: a|baba # ok, let's try .*? == "" first
# can't go further, backtracking
a.*?|a: ab|aba # lets try .*? == "b" now
a.*?a|: aba|ba
# If the regex were a.*?a$, there would be two extra backtracking
# steps such that .*? == "bab".
Greedy:
a.*?a: ababa
a|.*a: a|baba
a.*|a: ababa| # try .* == "baba" first
# backtrack
a.*|a: abab|a # try .* == "bab" now
a.*a|: ababa|
在这种情况下,regex_match( abc )
就像regex_search( ^abc$ )
.