Функція str_replace і регулярні вирази

21

Від автора: вітаю вас, друзі. У цій статті ми познайомимося з функцією str_replace, як певної альтернативи регулярними виразами. Отже, функція str_replace і регулярні вирази. Приступимо?

Регулярні вирази — дуже потужний засіб для пошуку і заміни в тексті. Однак при вирішенні простих задач пошуку і заміни далеко не завжди варто вдаватися до засобів регулярних виразів. Це буде схоже на стрілянину з гармати по горобцях. Завдання-то ви вирішите, але коштів для її вирішення витратите більше, ніж могли б.

Наприклад, перед нами стоїть наступна найпростіша задача. Є рядок з групами цифр, розділених пробілами. Необхідно ці прогалини замінити, скажімо, символом тире. Завдання дійсно найпростіша і вирішити її можна таким же простим шаблоном регулярного виразу:

Функція str_replace і регулярні вирази

Однак цю ж задачу можна вирішити і без регулярних виразів. Для рішення можна звернутися до функцій для роботи з рядками, зокрема в PHP це буде функція str_replace. Функція приймає три обов’язкові параметри:

search — що шукаємо

replace — на що міняємо

subject — де шукаємо і міняємо

Вирішимо задачу, використовуючи функцію str_replace:

$str = ‘1111 2222 3333 4444’;
echo str_replace(‘ ‘, ‘-‘, $str);

Результат отримаємо той же, що і з використанням регулярних виразів. Приємним бонусом може стати той факт, що функція str_replace може працювати не тільки з рядками, але і з масивами (array). Приклади роботи можна знайти в документації.

Варто враховувати, що функція str_replace регистрозависима. Наприклад, якщо ми захочемо змінити всі букви «r» в якійсь рядку, то будуть замінені лише літери зазначеного регістра:

$str = ‘rRr’;
echo str_replace(‘r’, ‘!’, $str); // !R!
echo ‘
‘;
echo str_replace(‘R’, ‘!’, $str); // r!r

Але є і регістронезавісімий аналог цієї функції — str_ireplace, який в іншому працює точно так само:

$str = ‘rRr’;
echo str_ireplace(‘r’, ‘!’, $str); // !!!

Звичайно ж, це прості задачі і вже для більш складних доведеться все-таки звертатися за допомогою регулярних виразів. Але якщо ми можемо обійтися без важкої артилерії, тоді навіщо палити з гармати по горобцях?

На цьому у мене все. Більше про регулярних виразах ви можете дізнатися з нашого курсу з регулярними виразами. Удачі!