外观中的可选字符

时间:2016-07-02 15:20:53

标签: regex regex-lookarounds lookaround

假设我希望使用RegEx找到orange的{​​{1}}的每次迭代,其中<{1}}前面有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?

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

  

Lookbehinds需要为零宽度,因此不允许使用量词。

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

1 个答案:

答案 0 :(得分:3)

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

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