首页 > 解决方案 > 正则表达式排除子字符串

问题描述

我正在尝试匹配参数字符串,但在存在子字符串时排除任何匹配项。

根据我有限的正则表达式知识,这应该可以排除任何包含“porcupine”的字符串,但事实并非如此。我究竟做错了什么?

(\/animal\?.*(?!porcupine).*color=white)

预期结果

| string                                          | matches? |
| ----------------------------------------------- | -------- |
| /animal?nose=wrinkly&type=porcupine&color=white | false    |
| /animal?nose=wrinkly&type=puppy&color=white     | true     |

实际结果

| string                                          | matches? |
| ----------------------------------------------- | -------- |
| /animal?nose=wrinkly&type=porcupine&color=white | true     |
| /animal?nose=wrinkly&type=puppy&color=white     | true     |

标签: regex

解决方案


使用调和的贪婪令牌:

/animal\?(?:(?!porcupine).)*color=white

演示和解释


推荐阅读