我正在尝试将字符串“ this”与除“ notthis”以外的其他任何字符(任意数量的字符)进行匹配。
正则表达式:^this.*(?!notthis)$
匹配项:thisnotthis
为什么?
即使它在regex calculator中的解释似乎也应该起作用。解释部分说
负前瞻(?!notthis)
声明以下正则表达式不匹配
notthis从字面上匹配notthis字符(区分大小写)
答案 0 :(得分:2)
否定前瞻对^this.*(?!notthis)$
没有影响,因为.*
将首先匹配直到字符串的末尾,而notthis
的末尾不再存在。
我认为您的意思是^this(?!notthis).*$
,您要从字符串的开头匹配this
,然后检查右边notthis
在这种情况下,请匹配除换行符之外的任何字符,直到字符串结尾。
^this(?!notthis).*$
图案的细节
^
声明字符串的开头this
从字面上匹配this
(?!
notthis)Assert what is directly on the right is not
notthis` .*
匹配除换行符外的任意字符0+次$
声明字符串的结尾如果notthis
不能出现在字符串中,而不能直接出现在this
之后,则可以将.*
添加到否定的lookahead中:
^this(?!.*notthis).*$
^^
以regulex视觉形式观看
答案 1 :(得分:0)
由于规则的顺序。在表达式无法否定前,先满足规则之前,没有什么可匹配的了。
如果您希望匹配 this 之后的所有内容(除了 notthis 以外的其他内容,this RegEx可能也可以帮助您完成此操作:
^this([\s\S]*?)(notthis|())$
它将创建一个没有任何内容的空组()
,并使用OR忽略notthis
:
^this([\s\S]*?)(notthis|())$
您可能会删除(), ^ 和 $ ,但仍然可以使用:
this([\s\S]*?)(notthis|)