环视中的可选字符
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?
假设我希望使用 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?