Привет, Гость!
Учебник PHP #8
символов, заключенная между <Ь> и </Ь> (вероятно, тегами HTML для вывода жирного текста);
p(hp)* — символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).
Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. Для этого служебные символы экранируются обратной косой чертой (\). Например, для поиска денежной суммы в долларах можно воспользоваться выражением \$[0-9]+, то есть «знак доллара, за которым следует одна или несколько десятичных цифр». Обратите внимание на обратную косую черту перед $. Возможными совпадениями для этого регулярного выражения являются $42, $560 и $3.
Стандартные интервальные выражения (символьные классы)
Для удобства программирования в стандарте POSIX были определены некоторые стандартные интервальные выражения, также называемые символьными классами (character classes). Символьный класс определяет один символ из заданного интервала — например, букву алфавита или цифру:
[[:alpha:]] — алфавитный символ (aA-zZ);
[[:digit:]]-цифра (0-9);
[[:alnum:]] — алфавитный символ (aA-zZ) или цифра (0-9);
[[:space:]] — пропуски (символы новой строки, табуляции и т. д.).
Функции РНР для работы с регулярными выражениями (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.html://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] <br>"; // Выводит "123"
print "$iparr[1] <br>"; // Выводит "456"
print "$iparr[2] <br>"; // Выводит "789"
print "$iparr[3] <br>"; // Выводит "000"
spliti( )
Функция spliti( ) работает точно так же, как ее прототип split( ), за одним исключением: она не учитывает регистра символов. Синтаксис функции spliti( ):
array spliti
p(hp)* — символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).
Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. Для этого служебные символы экранируются обратной косой чертой (\). Например, для поиска денежной суммы в долларах можно воспользоваться выражением \$[0-9]+, то есть «знак доллара, за которым следует одна или несколько десятичных цифр». Обратите внимание на обратную косую черту перед $. Возможными совпадениями для этого регулярного выражения являются $42, $560 и $3.
Стандартные интервальные выражения (символьные классы)
Для удобства программирования в стандарте POSIX были определены некоторые стандартные интервальные выражения, также называемые символьными классами (character classes). Символьный класс определяет один символ из заданного интервала — например, букву алфавита или цифру:
[[:alpha:]] — алфавитный символ (aA-zZ);
[[:digit:]]-цифра (0-9);
[[:alnum:]] — алфавитный символ (aA-zZ) или цифра (0-9);
[[:space:]] — пропуски (символы новой строки, табуляции и т. д.).
Функции РНР для работы с регулярными выражениями (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.html://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] <br>"; // Выводит "123"
print "$iparr[1] <br>"; // Выводит "456"
print "$iparr[2] <br>"; // Выводит "789"
print "$iparr[3] <br>"; // Выводит "000"
spliti( )
Функция spliti( ) работает точно так же, как ее прототип split( ), за одним исключением: она не учитывает регистра символов. Синтаксис функции spliti( ):
array spliti
Комментарии (0)
Скачать Java книгу»php/mysql/pdo/js
В библиотеку