我希望使用正则表达式从字符串中排除pqr
。
目前我所拥有的是:
abc\/(?!.*pqr).*\/xyz
这个正则表达式可以正确拒绝
abc/pqr/xyz
,但也会拒绝我想要匹配的abc/pqrst/xyz
。我希望只有当
pqr
是一个完整的单词时才排除它,而不是当它是较长单词(如pqrst
)的子字符串时排除它。我希望使用正则表达式从字符串中排除pqr
。
目前我所拥有的是:
abc\/(?!.*pqr).*\/xyz
abc/pqr/xyz
,但也会拒绝我想要匹配的abc/pqrst/xyz
。pqr
是一个完整的单词时才排除它,而不是当它是较长单词(如pqrst
)的子字符串时排除它。pqr
。 abc\/(?!.*\bpqr\b).*\/xyz
^^ ^^
请查看正则表达式演示。如果您不使用单词边界,任何pqr
都会导致正则表达式失败,当您添加单词边界时,只有那些包含完整单词pqr
的匹配项将失败。
另一种方法是在特定上下文中匹配pqr
:
abc\/(?!(?:.*\/)?pqr\/).*\/xyz
请查看另一个演示。这里,(?!(?:.*\/)?pqr\/)
将匹配在abc/
或在abc
后面,跟随0个或多个任意字符直到最后一个/
,并且只有当跟随另一个/
时才匹配。在所有其他上下文中,您都会有一个匹配。
注意:相同的方法应该应用于xyz
(您可以在其后添加\b
以匹配整个单词xyz
)。
注意2:要求pqr
出现在xyz
之前,请使用abc\/(?!(?:(?!\/xyz).)*\bpqr\b).*\/xyz
。
\b
”。 - Wiktor Stribiżew.*
而不是 \w*
,那么一个有效值以 pqr
开头,后面跟着 \W
中的某些字符的可能性不大吗? - Rawlingabc\/(?!(?:.*\/)?pqr(?:\/|$)).*\/xyz
(允许在字符串末尾匹配 pqr
)。 - Wiktor Stribiżewpqr/
:abc\/(?!.*pqr\/).*\/xyz
(?!.*
中的.*
会阻止您接受abc/defpqr/xyz
;您确定这是您想要的吗?
pqr
?在它周围加上\b
。abc\/(?!.*\bpqr\b).*\/xyz
。请参阅 https://regex101.com/r/HjJBBH/1 - Wiktor Stribiżew