Модификатор #x
работает наоборот. Это позволяет использовать посторонние пробелы в регулярных выражениях, которые игнорируются при поиске:
preg_match('# s p a m #ix')
Будет совпадать только со спамом.
То, что вам нужно сделать, чтобы найти произвольное пространство с вашим регулярным выражением, это ввести \s*
между любыми буквами:
preg_match('# S \s* P \s* A \s* M #ix', 's p a m');
Вы можете немного автоматизировать / упростить это, преобразовав слова в соответствующее регулярное выражение с перемешанным \s*
, используя:
$regex = join('\s*', str_split("spam", 1));
preg_match("#$regex#ix", "s p a m");