匹配最少字符数的正则表达式

Regex matching the smallest number of characters

什么一般的(即不包括任何特定于模式的文字作为一个整体)PCRE 子表达式放置在两个子表达式之间,每个子表达式都由文字字符组成,将使模式匹配最少数量的字符?

请注意,此问题不满足:

此正则表达式查找以 left 开头并以 right 结尾的最短匹配项,并允许介于两者之间的任何文本:

(left)(?:(?!(?1)).)*?(?:right)

此正则表达式适用于 PCRE 和任何其他支持 subroutine calls 的风格。 leftright 位不必是文字文本。它们可以是任何正则表达式,只要它们不匹配相同的文本即可。您需要考虑的唯一另一个问题是,如果 leftright 包含捕获组,那么与 leftright 相比,这些组的数量将发生变化独立的正则表达式。

回溯正则表达式引擎总是return最左边的匹配。在 leftright 不同的情况下,我们可以通过确保匹配不多次包含 left 来强制它成为 return 最短匹配。

leftright 相同时,没有纯正则表达式解决方案。然后你可以做的是沿着 left 的所有匹配项拆分字符串,然后在结果数组中找到最短的字符串。