用于确保字符串不完全匹配的正则表达式

时间:2018-09-03 13:26:32

标签: regex string match

我想构建一个仅在字符串不完全是“ amp”的情况下才应匹配的正则表达式。

我想要的是:

此字符串不应匹配:
“地点/美国/纽约/安培”

这些字符串应匹配:
“地点/美国/纽约/ amphi”
“场地/美国/纽约/露营”

我当前的正则表达式是: venues-in\/([a-zA-Z0-9-+'.]+)\/([a-zA-Z0-9-+'.]+)\/([a-zA-Z0-9-+'.]+)

我尝试在https://regex101.com/上使用!运算符,并且前瞻性为负: ^(?=amp)([a-zA-Z0-9-+'.]+)

但是我不知道。请帮忙。

3 个答案:

答案 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)

我认为这会起作用,

venues-in\/([a-zA-Z0-9\-+'.]+)\/([a-zA-Z0-9\-+'.]+)\/(?!amp$)([a-zA-Z0-9\-+'.]+)

Regex

答案 2 :(得分:0)

为什么不匹配\bamp\b,然后在程序中进行不相等的运算。在Perl中应该是

if ($string !~ /\bamp\b/) {
    # Do stuff with out amp
}
else {
    # Do stuff with amp
}