我想构建一个仅在字符串不完全是“ amp”的情况下才应匹配的正则表达式。
我想要的是:
此字符串不应匹配:
“地点/美国/纽约/安培”
这些字符串应匹配:
“地点/美国/纽约/ amphi”
“场地/美国/纽约/露营”
我当前的正则表达式是:
venues-in\/([a-zA-Z0-9-+'.]+)\/([a-zA-Z0-9-+'.]+)\/([a-zA-Z0-9-+'.]+)
我尝试在https://regex101.com/上使用!
运算符,并且前瞻性为负:
^(?=amp)([a-zA-Z0-9-+'.]+)
但是我不知道。请帮忙。
答案 0 :(得分:2)
使用
venues-in\/([a-zA-Z0-9-+'.]+)\/([a-zA-Z0-9-+'.]+)\/(?!amp$)([a-zA-Z0-9-+'.]+)
否定的超前语法为(?!pattern)
。 $
用于确保所检查的单词正好是amp
,没有后缀。
如果您的字符串也可能像venues-in/united-states/new-york/amp/whatever
一样,请将前行调整为(?!amp(?:$|\/)
。
答案 1 :(得分:1)
答案 2 :(得分:0)
为什么不匹配\bamp\b
,然后在程序中进行不相等的运算。在Perl中应该是
if ($string !~ /\bamp\b/) {
# Do stuff with out amp
}
else {
# Do stuff with amp
}