使用正则表达式负向前瞻排除精确字符串

时间:2016-10-06 10:29:44

标签: regex regex-negation

我想使用正则表达式从字符串中排除pqr

我目前拥有的是

abc\/(?!.*pqr).*\/xyz

这会正确拒绝abc/pqr/xyz,但它也会拒绝我希望它匹配的abc/pqrst/xyz

我希望pqr仅在完整单词时被排除,而不是在pqrst这样的较长单词的子字符串时被排除。

2 个答案:

答案 0 :(得分:0)

您可以使用word boundaries与前瞻内的pqr

 abc\/(?!.*\bpqr\b).*\/xyz
           ^^   ^^

请参阅regex demo。如果你不使用单词边界,任何pqr将导致正则表达式失败,当你添加单词边界时,只有那些匹配将失败,pqr作为整个单词存在。

另一种方法是在特定的上下文中匹配pqr

 abc\/(?!(?:.*\/)?pqr\/).*\/xyz

another demo。在此(?!(?:.*\/)?pqr\/)之后abc/或之后abc将匹配0 +任何字符,直到最后/,并且仅在跟随另一个/时匹配。在所有其他情况下,您将获得匹配。

注意:xyz应采用相同的方法(您可以在其后添加\b以匹配整个单词xyz

注意2:要求pqr出现在xyz之前,请使用abc\/(?!(?:(?!\/xyz).)*\bpqr\b).*\/xyz

答案 1 :(得分:0)

一个简单的检查就是看到你当时没有pqr/

abc\/(?!.*pqr\/).*\/xyz

另请注意.*中的(?!.*会阻止您接受abc/defpqr/xyz;你确定那是你想要的吗?