否定与单个单词匹配的正则表达式以不返回匹配项


Negate regex matching a single word to return no matches

我需要否定这个正则表达式:

^sofia$ 

我该怎么做?

您需要一个负面展望:

^(?!sofia$).*$

参见演示

编辑:如果您只是对preg_match的布尔结果感兴趣,可以删除.*$

此外,如果输入字符串包含换行符,则需要使用单行修饰符/s(或其内联变体(?s)(。例如

(?s)^(?!sofia$).*$

/^(?!sofia$).*$/s

您的^sofia$与等于sofia的字符串/行匹配,因此您必须查找一个正则表达式,该正则表达式将与任何不等于sofia的字符串/行将匹配。

否定外观可以用来限制通用模式。这里,.*匹配除了换行符之外的任何字符,0次或更多次。先行检查字符串/行的开头是否没有sofia