使用正则表达式否定前瞻排除确切的字符串
Exclude exact string using regex negative lookahead
我想使用正则表达式从字符串中排除 pqr
。
我目前拥有的是
abc\/(?!.*pqr).*\/xyz
这正确地拒绝了 abc/pqr/xyz
,但它也拒绝了我希望它匹配的 abc/pqrst/xyz
。
我希望 pqr
仅在它是一个完整的单词时被排除,而不是在它是较长单词的子字符串时被排除,例如 pqrst
.
您可以将 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
.
一个简单的检查就是看看你当时没有 pqr/
:
abc\/(?!.*pqr\/).*\/xyz
另请注意 (?!.*
中的 .*
会阻止您接受 abc/defpqr/xyz
;你确定那是你想要的吗?
我想使用正则表达式从字符串中排除 pqr
。
我目前拥有的是
abc\/(?!.*pqr).*\/xyz
这正确地拒绝了 abc/pqr/xyz
,但它也拒绝了我希望它匹配的 abc/pqrst/xyz
。
我希望 pqr
仅在它是一个完整的单词时被排除,而不是在它是较长单词的子字符串时被排除,例如 pqrst
.
您可以将 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
.
一个简单的检查就是看看你当时没有 pqr/
:
abc\/(?!.*pqr\/).*\/xyz
另请注意 (?!.*
中的 .*
会阻止您接受 abc/defpqr/xyz
;你确定那是你想要的吗?