环视中的可选字符

Optional Characters in a Lookaround

假设我希望使用 RegEx 找到 orange 的每个迭代,即 而不是 前面有 apple and。我也希望这适用于各自的复数形式。

以下是有效和无效的列表。

orange             - valid
oranges            - valid
an orange          - valid
apple and orange   - invalid
apple and oranges  - invalid
apples and orange  - invalid
apples and oranges - invalid

到目前为止,我为使这成为可能而编写的代码如下。

(?<!apples? and )oranges?

当我测试它时,我收到一个错误,追溯到 apple 之后的可选 s 字符。 Regex101 将错误描述如下。

Lookbehinds need to be zero-width, thus quantifiers are not allowed.

这是为什么?我该如何解决这个问题?

后视必须有固定的长度。通过指定一个可选字符,您可以指示长度可以相差一个。这是不被接受的。但是,您不受执行后视次数的限制,因此您可以将其分成两部分,如下所示:

(?<!apple and )(?<!apples and )oranges?