结合正面前瞻和负面前瞻 - 正则表达式

Combining Positive Lookahead and Negative Lookahead - Regex

我正在使用 ~

在 postgres 9.5 中编写一个简单的正则表达式

我想结合正面前瞻和负面前瞻。这是我的正则表达式,它不起作用:

CHANGE.+(?=SHOES.+(?!NIKE))

这是我的 DEMO,下面是我的问题示例:

匹配:

CHANGE THE SHOES TO REBOOK.

不匹配:

CHANGE OF SHOES TO NIKE AIRS.

SHOES 之后的 .+ 是贪心的,因此 (?! 只会在字符串末尾为真时检查(即没有 NIKE 那里),所以没有回溯。

改为这样做:

CHANGE.+(?=SHOES(?!.*NIKE))

这是一个仅使用单个否定前瞻的解决方案:

SELECT *
FROM yourTable
WHERE col ~ 'CHANGE.+SHOES(?!.*NIKE)';

如果您想得到问题的确切答案,请参阅@trincot 的回复。