否定匹配单个单词的正则表达式 return 没有匹配项

Negate regex matching a single word to return no matches

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

^sofia$ 

我该怎么做?

你需要一个负面的前瞻:

^(?!sofia$).*$

demo

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

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

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

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

您的 ^sofia$ 匹配等于 sofia 的 string/line,因此您必须寻找一个正则表达式来匹配不等于 [=] 的任何 string/line 18=].

否定前瞻可用于限制通用模式。这里,.* 匹配除换行符之外的任何字符,0 次或更多次。前瞻检查 string/line.

的开头是否没有 sofia