正向和负向相结合-正则表达式

时间:2018-11-03 00:19:30

标签: regex postgresql lookahead

我正在使用~

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

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

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

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

MATCH:

CHANGE THE SHOES TO REBOOK.

未匹配:

CHANGE OF SHOES TO NIKE AIRS.

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

.+之后的SHOES是贪婪的,因此(?!仅在字符串为真的末尾进行检查(即那里没有NIKE ),因此没有回溯。

相反,这样做:

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