Предполагая \b(?:word1|word2|word3)\b
Причина, по которой он не соответствует «word1», заключается в том, что вы включили разделитель слов, \b
.
То, что вы можете сделать, это просто всегда вводить разделитель слов:
preg_match("\b(?:word1|word2|word3)\b", "." . $subject . ".", $matches);
Грубый, но эффективный.