Отрицание регулярного выражения, совпадающего с одним словом, чтобы не возвращать совпадений


Мне нужно отрицать это регулярное выражение:

^sofia$ 

Как я могу это сделать?

1 2

1 ответ:

Вам нужен отрицательный внешний вид:

^(?!sofia$).*$

Смотрите демо

EDIT: если вы просто заинтересованы в булевом результате с preg_match, Вы можете удалить .*$.

Также, если входные строки содержат символы новой строки, требуется однострочный модификатор /s (или его встроенный вариант (?s)). Например,

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

Или

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

Ваш ^sofia$ соответствует строке / строке, равной sofia, поэтому вы должны искать регулярное выражение, которое будет соответствовать любой строке / строке, которая не является равно sofia.

Отрицательные наблюдатели могут использоваться для ограничения общих шаблонов. Здесь .* соответствует любым символам, кроме новой строки, 0 или более раз. Lookahead проверяет, нет ли sofia прямо в начале строки / строки.