Изучаем PHP программирование

   Search   

Русская версия | English version   

Скрипты :: Секреты профессионалов :: Link :: FAQ   Пишите письма  



 

главная :: основы PHP

Функции РНР для работы с регулярными выражениями (POSIX-совместимые)

В настоящее время РНР поддерживает семь функций поиска с использованием регулярных выражений в стиле POSIX: еrеg( ); еrеg_rерlасе( ); eregi( ); eregi_replace( ); split( ); spliti( ); sql_regcase( ). Описания этих функций приведены в следующих разделах. ereg( ) Функция еrеg( ) ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис функции ereg( ): int ereg (string шаблон, string строка [, array совпадения]) Поиск производится с учетом регистра алфавитных символов. Пример использования ereg( ) для поиска в строках доменов .соm: $is_com - ereg("(\.)(com$)", $email): // Функция возвращает TRUE, если $email завершается символами ".com" // В частности, поиск будет успешным для строк // "www.wjgilmore.com" и "someemail@apress.com" Обратите внимание: из-за присутствия служебного символа $ регулярное выражение совпадает только в том случае, если строка завершается символами .com. Например, оно совпадет в строке "www.apress.com", но не совпадет в строке "www.apress.com/catalog". Необязательный параметр совпадения содержит массив совпадений для всех подвыражений, заключенных в регулярном выражении в круглые скобки. В листинге 8.1 показано, как при помощи этого массива разделить URL на несколько сегментов. Листинг 8.1. Вывод элементов массива $regs $url = "http://www.apress.com"; // Разделить $url на три компонента: "http://www". "apress" и "com" $www_url = ereg("^(http://www)\.([[:alnum:]+\.([[:alnum:]]+)". $url, $regs); if ($www_url) : // Если переменная $www_url содержит URL echo $regs[0]; // Вся строка "http://www.apress.com" print "
"; echo $regs[l]; // "http://www" print "
"; echo $regs[2]; // "apress" print "
"; echo $regs[3]; // "com" endif; При выполнении сценария в листинге 8.1 будет получен следующий результат: http://www.apress.com http://www apress com ereg_replace( ) Функция ereg_replace( ) ищет в заданной строке совпадение для шаблона и заменяет его новым фрагментом. Синтаксис функции ereg_replace( ): string ereg_replace (string шаблон, string замена, string строке) Функция ereg_replace( ) работает по тому же принципу, что и ereg( ), но ее возможности расширены от простого поиска до поиска с заменой. После выполнения замены функция возвращает модифицированную строку. Если совпадения отсутствуют, строка остается в прежнем состоянии. Функция ereg_replace( ), как и еrеg( ), учитывает регистр символов. Ниже приведен простой пример, демонстрирующий применение этой функции: $copy_date = "Copyright 1999": $copy_date = ereg_replace("([0-9]+)". "2000", $copy_date); print $copy_date: // Выводится строка "Copyright 2000" У средств поиска с заменой в языке РНР имеется одна интересная возможность — возможность использования обратных ссылок на части основного выражения, заключенные в круглые скобки. Обратные ссылки похожи на элементы необязательного параметра-массива совпадения функции еrеg( ) за одним исключением: обратные ссылки записываются в виде \0, \1, \2 и т. д., где \0 соответствует всей строке, \1 — успешному совпадению первого подвыражения и т. д. Выражение может содержать до 9 обратных ссылок. В следующем примере все ссылки на URL в тексте заменяются работающими гиперссылками: $url = "Apress (http://www.apress.com"); $url = ereg_replace("http://(([A-Za-z0-9.\-])*)", "\\0", $url); print $url; // Выводится строка: // Apress (http://www.apress.com) eregi( ) Функция eregi( ) ищет в заданной строке совпадение для шаблона. Синтаксис функции eregi( ): int eregi (string шаблон, string строка [, array совпадения]) Поиск производится без учета регистра алфавитных символов. Функция eregi( ) особенно удобна при проверке правильности введенных строк (например, паролей). Использование функции eregi( ) продемонстрировано в следующем примере: $password = "abc"; if (! eregi("[[:alnum:]]{8.10}, $password) : print "Invalid password! Passwords must be from 8 through 10 characters in length."; endif; // В результате выполнения этого фрагмента выводится сообщение об ошибке. // поскольку длина строки "abc" не входит в разрешенный интервал // от 8 до 10 символов. eregi_replace( ) Функция eregi_replасе( ) работает точно так же, как ereg_replace( ), за одним исключением: поиск производится без учета регистра символов. Синтаксис функции ereg_replace( ): string eregi_replace (string шаблон, string замена, string строка) split( ) Функция split( ) разбивает строку на элементы, границы которых определяются по заданному шаблону. Синтаксис функции split( ): array split (string шаблон, string строка [, int порог]) Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка слева направо. Если шаблон содержит алфавитные символы, функция spl it( ) работает с учетом регистра символов. Следующий пример демонстрирует использование функции split( ) для разбиения канонического IP-адреса на триплеты: $ip = "123.345.789.000"; // Канонический IP-адрес $iparr = split ("\.", $ip) // Поскольку точка является служебным символом. // ее необходимо экранировать. print "$iparr[0]
"; // Выводит "123" print "$iparr[1]
"; // Выводит "456" print "$iparr[2]
"; // Выводит "789" print "$iparr[3]
"; // Выводит "000" spliti( ) Функция spliti( ) работает точно так же, как ее прототип split( ), за одним исключением: она не учитывает регистра символов. Синтаксис функции spliti( ): array spliti (string шаблон, string строка [, int порог]) Разумеется, регистр символов важен лишь в том случае, если шаблон содержит алфавитные символы. Для других символов выполнение spliti( ) полностью аналогично split( ). sql_regcase( ) Вспомогательная функция sql_regcase( ) заключает каждый символ входной строки в квадратные скобки и добавляет к нему парный символ. Синтаксис функции sql_regcase( ): string sql_regcase (string строка) Если алфавитный символ существует в двух вариантах (верхний и нижний регистры), выражение в квадратных скобках будет содержать оба варианта; в противном случае исходный символ повторяется дважды. Функция sql_regcase( ) особенно удобна при использовании РНР с программными пакетами, поддерживающими регулярные выражения в одном регистре. Пример преобразования строки функцией sql_regcase( ): $version = "php 4.0"; print sql_regcase($version); // Выводится строка [Pp][Hh][Pp][ ][44][..][00]

Designed by Fedin
All right reserved
2003-2004
Hosted by uCoz