正则表达式中的重叠匹配?(Rust 正则表达式引擎)

Inf*_*rix 2 regex rust

我目前正在尝试解决Advent of Code 2023 day 1问题,但第二部分有类似的短语threeight,我不确定如何匹配。我最初的方法是(?:[0-9]|zero|one|two|three|four|five|six|seven|eight|nine),但这不支持拼写数字之间的重叠。

我知道这个regex板条箱不支持环视,但即使有了它们,我也不知道如何在同一个正则表达式中使用 [0-9] 来做到这一点。

Mas*_*inn 5

我知道正则表达式板条箱不支持环视,但即使有了它们,我也不知道如何在同一个正则表达式中使用 [0-9] 来做到这一点。

您可以在先行断言中捕获,但先行断言实际上并不匹配任何内容。因此,如果您先行查找,然后仅匹配单个字符,则“先行捕获”将应用于每个索引,因此您将获得所有可能的出现。

我不确定如何匹配。

简单的解决方案是一次提取一个匹配项。当你有第一个捕获时,你可以检索它的起始索引,增加它(通常你必须跳到下一个char,但 AOC 都是 ascii,所以你可以只增加一个字节),然后寻找下一个匹配。

另一种选择是使用,RegexSet因为它支持匹配

可能重叠

正则表达式:您只需使用每个数字作为集合中的正则表达式,而不是构建交替组。尽管这仅告诉您哪些正则表达式匹配,因此您仍然需要重新检查多个正则表达式是否匹配,以了解最高和最低值。

最后,您可以降低并使用底层aho-corasick,实际算法默认情况下会找到重叠的出现,因此这是开箱即用的支持