Руководство по языку программирования PHP
 

PCRE
 

Функции для работы с регулярными выражениями

preg_replace()

Синтаксис:

preg_replace ( pattern , replacement , subject[, limit [, count ]] )


Поддерживается следующими версиями PHP:

3.0.9
4
5
+
+
+

Описание функции:

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

Аргумент
Описание
Тип
pattern

Обязательный аргумент. Регулярное выражение (шаблон поиска)

string, array
replacement

Обязательный аргумент. Строка или массив с данными используемыми для замены данных в subject

Аргумент может быть ссылкой имеющий вид $n или \\n, где n - номер подмаски из шаблона поиска. n для подмаски может принимать значения от 1 до 99. Ссылка $0 выдаст полное совпадение шаблона.

Также для ссылок можно использовать конструкцию вида \${1} равнозначную \$1, это конструкция используется если после ссылки идет сразу цифра (\${1}1).

string, array
subject Обязательный аргумент. Строка или массив с данными которые будут заменены. string, array
limit

Необязательный аргумент. Максимально количество замен. По умолчанию равно -1 (не ограниченно)

int
count

Необязательный аргумент. Переменная в которой содержится количество произведенных замен.

int

Функция preg_replace() может использоваться с модификатором /e. При наличии этого модификатора параметр replacement интерпретируется как PHP-код и затем используется для замены.


Регулярные выражения

Отдельно следует остановится на регулярных выражениях, без представления о которых довольно трудно (если вообще возможно) разобраться с работой функции preg_replace().

Достаточно хорошо описание регулярных выражений приводится на wikipedia.org, основные моменты применения регулярных выражений также описаны здесь.


Примеры:

Пример 1:

В этом примере заменяем все цифры помещенные в скобки на звездочки.

<?php
$str = "(945)-55-34-33(02)";
$arr_str = preg_replace("/\([0-9]+\)/", "***",$str);
print_r ($arr_str);

?>

Результат:

***-55-34-33***

Пример 2:

В этом примере заменяем строку соответствующую всему шаблону, данными соответствующими первой подмаске по ссылке \$1. Другими словами "have 3 apples", соответствующие "/(\w+) (\d+) (\w+)/", будет заменено на "have", соответствующее (\w+).

<?php
$str = "I have 3 apples";
$pattern = "/(\w+) (\d+) (\w+)/";
$replacement = "\$1";
echo preg_replace($pattern, $replacement, $str);
?>

Результат:

I have

Пример 3:

В этом примере показано, что произойдет если в качестве pattern и replacement использовать массивы.

<?php
$pattern = array('/1/','/2/','/3/');
$replacement = array("одно","две","три");
$str= "У меня есть 1 яблоко, 2 груши и 3 апельсина.";
$str_replace = preg_replace($pattern, $replacement, $str);
print ($str_replace);

?>

Результат:

У меня есть одно яблоко, две груши и три апельсина.

Пример 4:

В этом примере показано, что произойдет если в качестве pattern, replacement и subject использовать массивы.

<?php
$pattern = array('/1/','/2/','/3/');
$replacement = array("одно","две","три");
$str[0]= "У меня есть 1 яблоко, 2 груши и 3 апельсина.";
$str[1]= "У меня есть 1 слива и 3 банана.";
$str_replace = preg_replace($pattern, $replacement, $str);
print_r ($str_replace);

?>

Результат:

Array ( [0] => У меня есть одно яблоко, две груши и три апельсина. [1] => У меня есть одно слива и три банана. )

Пример 5:

В этом примере показано использование модификатора /e, т.е когда replacement интерпретируется как php код. Ниже показано преобразование символов из нижнего в верхний регистр.

<?php
$str = preg_replace("/(\w+)/e","strtoupper('$1')", "hello");
print ($str);

?>

Результат:

HELLO

Пример 6:

В этом примере показано использование аргумента count. Здесь результат будет равен 2, так произошло две замены.

<?php
$str = preg_replace("/(\d+)/","*", "У меня есть 3 ручки и 2 карандаша",-1,$itogo);
print ($itogo);

?>

Результат:

2

 

 

PCRE функции

preg_grep()
preg_filter()
preg_last_error()
preg_match()
preg_match_all()
preg_quote()
preg_replace()
preg_replace_callback()
preg_split()

 

 

???????@Mail.ru