Все ленты — последние статьи

Функция preg_replace() замены первого вхождения символа

Функция preg_replace()
В данном уроке рассмотрен вариант замены первого вхождения символа плюс в строку.
Функция preg_replace — выполняет поиск и замену по регулярному выражению.
Синтаксис функции такой:
mixed preg_replace (mixed pattern, mixed replacement, mixed subject [, int limit])
Разберём синтаксис.


pattern — это шаблон по которому ищется совпадение в строке subject и если оно найдено, то оно заменяется строкой replacement. Причём замена происходит во всей строке. Для того чтоб сократить аппетит функции preg_replace и заменить только первое вхождение заданного символа (или словосочетания) в строке, limit должен быть равен единице. Если лимит не указан или равен -1, функция preg_replace делает замену во всей строке replacement, где находится совпадение с патерном (pattern).
Хочу отметить, что здесь я не касаюсь всей функциональности preg_replace функции, для этого есть документация. Могу только дополнить что паттерном может быть массив значений, в прочем как и replacement.
В примере ниже заменим первое вхождение знака плюс (+) на знак не равно (<>).

Листинг № 1 — Поиск и замена с помощью функции preg_replace.
<?php

$str="1+2*3+4/5+6";

$patterns ="/[+]/";
$replace = "<>";
print preg_replace($patterns, $replace, $str, 1);

// выведет 1<>2*3+4/5+6

?>
Меняем знак между десятичных цыфр
Как заменить все точки в строке, которые находятся между цифр?
В данном примере используется именно этот ответ на вопрос выше, но понятно, что это всего лишь пример и его можно модифицировать используя конструкции регулярных выражений ретроспективной проверки (?<= и опережающей проверки (?=

Листинг № 2 — Меняем знак между десятичных цыфр
<?php

$string = 'Сегодня: ' .date('d.m.Y время H.i.s').
'<br>В этом тексте нужно заменить точку (.) в выражениях (18.01.2013) или в выражениях подобных 17.40. В тексте точка меняться не будет.';

$pattern = "/(?<=d).(?=d)/";

$replacement = "-";

echo preg_replace($pattern, $replacement, $string);

?>