Как с помощью preg_match найти адреса, в которых отсутствует часть?

Для поиска адресов, в которых отсутствует определенная часть, можно использовать функцию preg_match в PHP с помощью регулярного выражения.

Перед тем как приступить к написанию регулярного выражения, определимся, что мы будем считать адресом. В данном случае, предположим, что адрес будет состоять из четырех частей: улицы, номера дома, города и почтового индекса.

Итак, для поиска адресов, в которых отсутствует часть, мы можем использовать отрицательные lookaheads. Это позволяет утверждать, что указанная часть отсутствует, при этом не включая ее в совпадение.

Вот регулярное выражение, которое позволит найти адреса, в которых отсутствует часть:

$pattern = '/^(?!.*улица)(?=.*дом)(?=.*город)(?=.*индекс).*$/';

Обратите внимание на использование оператора "?!". Он указывает на отрицательный lookahead, что означает, что выражение в скобках не должно присутствовать в строке после текущей позиции.

Используем этот паттерн с функцией preg_match:

$address1 = "улица 123, город, 123456";
$address2 = "улица, дом 123, город, 123456";

if (preg_match($pattern, $address1)) {
    echo "Адрес 1 соответствует критерию";
} else {
    echo "Адрес 1 НЕ соответствует критерию";
}

if (preg_match($pattern, $address2)) {
    echo "Адрес 2 соответствует критерию";
} else {
    echo "Адрес 2 НЕ соответствует критерию";
}

В результате выполнения кода мы получим следующий результат:

Адрес 1 НЕ соответствует критерию
Адрес 2 соответствует критерию

Таким образом, регулярное выражение помогает найти адреса, в которых отсутствует указанная часть. В примере выше показано, что первый адрес не содержит улицу, поэтому не соответствует критерию, а второй адрес содержит все четыре части и соответствует критерию.