Regex 结合正向前瞻和反向前瞻-正则表达式

Regex 结合正向前瞻和反向前瞻-正则表达式,regex,postgresql,lookahead,Regex,Postgresql,Lookahead,我正在Postgres9.5中使用~ 我想结合积极前瞻和消极前瞻。这是我的正则表达式,它不起作用: CHANGE.+(?=SHOES.+(?!NIKE)) 以下是我的问题,以下是我的问题示例: 匹配: CHANGE THE SHOES TO REBOOK. CHANGE OF SHOES TO NIKE AIRS. 不匹配: CHANGE THE SHOES TO REBOOK. CHANGE OF SHOES TO NIKE AIRS. 鞋之后的+是贪婪的,因此(?!将只在字符串末尾

我正在Postgres9.5中使用
~

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

CHANGE.+(?=SHOES.+(?!NIKE))
以下是我的问题,以下是我的问题示例:

匹配:

CHANGE THE SHOES TO REBOOK.
CHANGE OF SHOES TO NIKE AIRS.
不匹配:

CHANGE THE SHOES TO REBOOK.
CHANGE OF SHOES TO NIKE AIRS.

鞋之后的
+
是贪婪的,因此
(?!
将只在字符串末尾检查为真的位置(即那里没有
NIKE
),因此没有回溯

而是这样做:


这里有一个解决方案,它只使用一个负前瞻:

SELECT *
FROM yourTable
WHERE col ~ 'CHANGE.+SHOES(?!.*NIKE)';
如果您想得到问题的确切答案,请参阅@trincot的回复