ГЛАВА 8. Строки и регулярные выражения
Функции РНР для работы с регулярными выражениями (Perl-совместимые)
В РНР существует пять функций поиска по шаблону с использованием Perl-совместимых регулярных выражений:
- preg_match();
- preg_match_all();
- preg_replace();
- preg_split();
- preg_grep().
Эти функции подробно описаны в следующих разделах.
preg_match()
Функция preg_match() ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE.
Синтаксис функции preg_match():
int pregjnatch(string шаблон, string строка [, array совпадения})
При передаче необязательного параметра совпадения массив заполняется совпадениями различных подвыражений, входящих в основное регулярное выражение. В следующем примере функция preg_match() используется для проведения поиска без учета регистра:
$linе = "Vi is the greatest word processor ever created!";
// Выполнить поиск слова "Vi" без учета регистра символов:
if(preg_match("/\bVi\b\i", $line, $matcn)) :
print "Match found!";
endif;
// Команда if в этом примере возвращает TRUE
preg_match_all()
Функция preg_match_all() находит все совпадения шаблона в заданной строке.
Синтаксис функции preg_match_all():
Int preg_match_all(string шаблон, string строка, array совпадения [, int порядок])
Порядок сохранения в массиве совпадения текста, совпавшего с подвыражениями, определяется необязательным параметром порядок. Этот параметр может принимать два значения:
- PREG_PATTERN_ORDER — используется по умолчанию, если параметр порядок не указан. Порядок, определяемый значением PREG_PATTERN_ORDER, на первый взгляд выглядит не совсем логично: первый элемент(с индексом 0) содержит массив совпадений для всего регулярного выражения, второй элемент(с индексом 1) содержит массив всех совпадений для первого подвыражения в круглых скобках и т.д.;
- PREG_SET_ORDER — порядок сортировки массива несколько отличается от принятого по умолчанию. Первый элемент (с индексом 0) содержит массив с текстом, совпавшим со всеми подвыражениями в круглых скобках для первого найденного совпадения. Второй элемент (с индексом 1) содержит аналогичный массив для второго найденного совпадения и т.д.
Следующий пример показывает, как при помощи функции preg_match_al() найти весь текст, заключенный между тегами HTML <b>...</b>:
$user_info = "Name: <b>Rasmus Lerdorf</b> <br> Title: <b>PHP Guru</b>";
preg_match_all("/<b>(.*)<\/b>/U", $userinfo, $pat_array);
print $pat_array[0][0]." <br> ".pat_array[0][l]."\n":
Результат:
Rasmus Lerdorf
PHP Guru
preg_replace()
Функция preg_replace() работает точно так же, как и ereg_replасе(), за одним исключением — регулярные выражения могут использоваться в обоих параметрах, шаблон и замена.
Синтаксис функции preg_replace():
mixed preg_replace(mixed шаблон, mixed замена, mixed строка [, int порог])
Необязательный параметр порог определяет максимальное количество замен в строке. Интересный факт: параметры шаблон и замена могут представлять собой масивы. Функция preg_replace() перебирает элементы обоих массивов и выполняет замену по мере их нахождения.
preg_split()
Функция preg_split() аналогична split() за одним исключением — параметр шаблон может содержать регулярное выражение.
Синтаксис функции preg_split():
array preg_split(string шаблон, string строка [, int порог [, int флаги]])
Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка. В следующем примере функция preg_split() используется для выборки информации из переменной.
$user_info="+wj+++Gilmore+++++wjgi]more@hotmail.com+++++++Columbus+++OH";
$fields = preg_split("/\+{1.}/", $user_info);
while($x < sizeof($fields)):
print $fields[$x]. "<br>";
$x++;
endwhile;
Результат:
WJ
Gilmore
wjgilmore@hotmail.com
Columbus
OH
preg_grep()
Функция preg_grep() перебирает все элементы заданного массива и возвращает все элементы, в которых совпадает заданное регулярное выражение.
Синтаксис функции preg_grep():
array preg_grep(string шаблон, array массив)
Пример использования функции preg_grep() для поиска в массиве слов, начинающихся на р:
$foods = array("pasta", "steak", "fish", "potatoes");
// Поиск элементов, начинающихся с символа "р".
// за которым следует один или несколько символов
$p_foods = preg_grep("/p(\w+)/", $foods);
$х = 0;
while($x < sizeof($p_foods)) :
print $p_foods[$x]. "<br>";
$Х++;
endwhile;
Результат:
pasta
potatoes
Назад |
Содержание раздела |
Общее Содержание |
Вперед
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|