Вы можете рассматривать аббревиатуру как отдельное слово, используя утверждение границы слова (\b
) с обеих сторон:
preg_replace('/\bod\b/i', 'odometer', 'od test od test od.')
// "odometer test odometer test odometer."
Если вы строго хотите сопоставлять только при наличии пробела, окружающего строку, используйте утверждение обратного взгляда ((?<=
) и утверждение предпросмотра ((?=
), соответствующее пробелу (\s
):
preg_replace('/(^|(?<=\s))od((?=\s)|$)/i', 'odometer', 'od test od test od.')
// "odometer test odometer test od."
Обратите внимание, что период трейлинга трактуется по-разному. (Также обратите внимание, что preg_replace
может принимать несколько сопоставлений шаблонов / замен в качестве массивов.)
Из документов :
Граница слова - это позиция в строке темы, где текущий
символ и предыдущий символ не совпадают с \ w или \ W (т.е.
один соответствует \ w, а другой соответствует \ W) или началу или концу
строка, если первый или последний символ соответствует \ w, соответственно.
\w
и \W
относятся к символам "word" и "non-word":
Символ «слово» - это любая буква, цифра или символ подчеркивания,
то есть любой символ, который может быть частью Perl-слова.
определение букв и цифр контролируется символом PCRE
таблицы, и могут отличаться, если происходит сопоставление для конкретной локали. За
Например, в локали "fr" (французский) некоторые коды символов больше
чем 128 используются для акцентированных букв, и они соответствуют \ w.