П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 4064 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6717 раз(а).

Учебник HTML.
Просмотров 3688 раз(а).

Руководство по PHP5.
Просмотров 5958 раз(а).

Хостинг через призму DNS.
Просмотров 4766 раз(а).

Подборка текстов стандартных документов.
Просмотров 56212 раз(а).

Учебник PHP - Самоучитель
Просмотров 3654 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 8238 раз(а).

Внешние атаки...
Просмотров 4507 раз(а).

Учебник PHP.
Просмотров 3149 раз(а).

SSI в примерах.
Просмотров 156 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





ГЛАВА 8. Строки и регулярные выражения

Функции РНР для работы с регулярными выражениями (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 "<br>";
  echo $regs[l];      // "http://www"
  print "<br>";
  echo $regs[2];      // "apress"
  print "<br>";
  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.\-])*)", "<a href=\"\\0\">\\0</a>", $url);
print $url;

// Выводится строка:
// Apress(<a href="http://www.apress.com">http://www.apress.com</a>)

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] <br>"; // Выводит "123"
print "$iparr[1] <br>"; // Выводит "456"
print "$iparr[2] <br>"; // Выводит "789"
print "$iparr[3] <br>"; // Выводит "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]

Назад | Содержание раздела | Общее Содержание | Вперед



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru