我想使用正则表达式从字符串中排除pqr
。
我目前拥有的是
abc\/(?!.*pqr).*\/xyz
这会正确拒绝abc/pqr/xyz
,但它也会拒绝我希望它匹配的abc/pqrst/xyz
。
我希望pqr
仅在完整单词时被排除,而不是在pqrst
这样的较长单词的子字符串时被排除。
答案 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
;你确定那是你想要的吗?