2014-02-24 3 views
-1

как я могу заменить все экземпляры слов с помощью PHP (желательно с использованием регулярных выражений). Это может звучать необычайно просто, но они должны быть словами. Например, если я хочу заменить слово foo в строке My foot has been hurting all day, get me some food so I can write some foo. Я не хочу, чтобы были найдены первые три символа foot и food, потому что они представляют собой отдельный объект из слова foo.PHP - Как заменить все экземпляры слов в строке

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

Я новичок в использовании регулярных выражений. Поэтому ваша помощь очень важна.

+0

'\ Wfoo \ W' должны соответствовать тому, что вы хотите. \ W соответствует любому символу без слова. Вы можете столкнуться с проблемой, если она находится в начале или конце файла, но для этого может быть отдельный случай. –

+0

@RedAlert: плохая идея. не будет соответствовать foo в самом начале и в конце позиции. –

+0

не говоря уже о том, что матч будет содержать эти лишние символы \ W, поэтому у вас есть дополнительная работа. –

ответ

5

Использование word boundaries (\b). Это совпадение нулевой длины, совпадающее в позиции между символом слова (\w) и символом без слова (\W).

$search = 'foo'; 
echo preg_replace('/\b'.preg_quote($search).'\b/', '', $str); 

Этот выход будет:

My foot has been hurting all day, get me some food so I can write some . 
+0

Словесная граница не подходит для определения ОП отдельного объекта. – sln

+1

Казалось, что это отлично работает. Работает в начале и конце строк. Мне действительно нужно изучить 'regex'. Еще раз спасибо. –

+0

@sln: Увидев, что ответ теперь принят, я думаю, что это действительно приемлемое решение :) –

-2

Регулярное выражение просто. Не используйте чрезмерно используемую фреймворк слов \ b.

(?:^|(?<=\s))foo(?:(?=\s)|$)

Смежные вопросы