Как в PHP заменить точные совпадения по границе слов?
Есть строка: Дороги не чистят не только в СВАО, но и ЮВАО, а также в ВАО, ЗАО...
Есть массив: САО * северный,
СВАО * северо-восточный
ВАО * восточнй
ЮВАО * юго-восточный
ЗАО * западный
Я не могу понять как пройтись каждым первым элементом массива (разделитель — *) по строке и заменить точные совпадения на второй элемент массива.
Пробовал preg_replace, но что-то не получается — заменяются все совпадения, даже если это часть слова, а надо точно.
Я выразился некорректно ибо поверхностно знаком с PHP. Там на самом деле не массив, а может быть и массив... Есть файл:
САО * северный * что-то еще * и еще
СВАО * северо-восточный * что-то еще * и еще
...
Вот такая там штуковина. Вариант ivankomolin — это, несомненно, решение, но из-за структуры и знаний хотелосбы понять:
— как сделать с регуляркой
— на сколько сильнее/прожорливее регулярки
Вообще на сколько выигрывают строковые функции сложно сказать, все очень сильно зависит от объема текста, количества замен. Но скорость разнится на порядки.
Это модификаторы шаблонов
i - регистронезависимость, т.е. найдутся как вхождения заглавных букв так и строчных, независимо от шаблона
u - обрабатывать строку в utf-8
s - особенности поиска в тексте с переносом строк(в данном случае необязательна, просто по умолчанию люблю писать шаблоны в таком режиме, чтобы использовать и переносы строк при поиске)
Дмитрий, да, это самый быстрый вариант использования строковых функций в данном случае.
Сам применяю такое, но только когда нужно многократно выполнить замены. При порядках в миллионы, есть неплохой выигрыш, а в однократных случаях почему-то предпочитаю str_replace, как-то удобнее что ли.