35.5 正则表达式的最长匹配搜索

常用的正则表达式函数在处理 ‘\|’ 与重复结构时会按需进行回溯,但只会持续到找到 某一个 匹配为止。找到后便立即成功并报告首个匹配结果。

本节介绍另一类搜索函数,它们会按照 POSIX 标准对正则表达式匹配执行完整回溯。这类函数会持续回溯,直至尝试所有可能并找到全部匹配,从而按照 POSIX 要求报告 最长匹配。这种方式速度慢得多,因此只在确实需要最长匹配时使用。

尽管名称如此,这些 POSIX 搜索与匹配函数使用的是 Emacs 正则表达式,而非 POSIX 正则表达式。See Emacs 与 POSIX 正则表达式对比。同时,它们也不正式支持非贪婪重复运算符(see non-greedy)。原因是 POSIX 回溯与非贪婪重复的语义相冲突。

Command: posix-search-forward regexp &optional limit noerror count

该函数与 re-search-forward 类似,区别在于它会按照 POSIX 标准对正则表达式匹配执行完整回溯。

Command: posix-search-backward regexp &optional limit noerror count

该函数与 re-search-backward 类似,区别在于它会按照 POSIX 标准对正则表达式匹配执行完整回溯。

Function: posix-looking-at regexp &optional inhibit-modify

该函数与 looking-at 类似,区别在于它会按照 POSIX 标准对正则表达式匹配执行完整回溯。

Function: posix-string-match regexp string &optional start inhibit-modify

该函数与 string-match 类似,区别在于它会按照 POSIX 标准对正则表达式匹配执行完整回溯。