Слайд 1Мировые информационные ресурсы
Лекция 6. Строки
и регулярные выражения
Слайд 2Механизмы поиска по шаблону
Механизмы поиска по шаблону решают четыре основные
задачи:
поиск строк, в точности совпадающих с заданным шаблоном;
поиск фрагментов
строк, совпадающих с заданным шаблоном;
замену строк и подстрок по шаблону;
поиск строк, с которыми заданный шаблон не совпадает.
Слайд 3Регулярные выражения
- последовательность простых и служебных символов, описывающих искомый текст.
В РНР существуют два семейства функций, каждое из которых относится
к определенному типу регулярных выражений: в стиле POSIX или в стиле Perl.
Слайд 4Синтаксис регулярных выражений (POSIX)
- различные элементы (операторы) объединяются друг с
другом и образуют более сложные выражения.
Простейшее регулярное выражение совпадает
с одним литеральным символом.
Пример:
последовательность gan совпадает в любой строке, содержащей эти символы (например, gang, organize или Reagan).
Оператор | (вертикальная черта) проверяет совпадение одной из нескольких альтернатив.
Пример:
регулярное выражение php | zend проверяет строку на наличие php или zend.
Слайд 5Синтаксис регулярных выражений (POSIX)
Квадратные скобки [ ] означают любой символ
из перечисленных в скобках.
Часто используемые интервалы:
[0-9] — совпадает с любой
десятичной цифрой от 0 до 9;
[a-z] — совпадает с любым символом нижнего регистра от а до z;
[A-Z] — совпадает с любым символом верхнего регистра от А до Z;
[a-Z] — совпадает с любым символом нижнего или верхнего регистра от а до Z.
Квантификаторы
р+ означает один или несколько символов р, стоящих подряд;
р* означает ноль и более символов р, стоящих подряд;
р? означает ноль или один символ р;
р{2} означает два символа р, стоящих подряд;
р{2,3} означает от двух до трех символов р, стоящих подряд;
р{2,} означает два и более символов р, стоящих подряд.
Слайд 6Синтаксис регулярных выражений (POSIX)
Служебные символы $ и ^
Выражение р$
означает строку, которая завершается символом р, а выражение ^р —
строку, начинающуюся с символа р.
Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).
Служебный символ . (точка) означает «любой символ». Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.
Обратная косая черта (\)
Пример: поиск денежной суммы в долларах: \$[0-9]+ - «знак доллара, за которым следует одна или несколько десятичных цифр».
Слайд 7Синтаксис регулярных выражений (POSIX)
Примеры:
^.{2}$ — любая строка, содержащая ровно два
символа;
(.*) — произвольная последовательность символов, заключенная между тегами HTML
для вывода жирного текста;
p(hp)* — символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).
Слайд 8Синтаксис регулярных выражений (POSIX)
Стандартные интервальные выражения (символьные классы)
- определены в
стандарте POSIX для удобства программирования
- также называются символьными классами (character
classes).
Символьный класс определяет один символ из заданного интервала — например, букву алфавита или цифру:
[[:alpha:]] — алфавитный символ (aA-zZ);
[[:digit:]]-цифра (0-9);
[[:alnum:]] — алфавитный символ (aA-zZ) или цифра (0-9);
[[:space:]] — пропуски (символы новой строки, табуляции и т. д.).
Слайд 9POSIX-совместимые функции РНР для работы с регулярными выражениями
Функция еrеg(
)
- ищет в заданной строке совпадение для шаблона. Если
совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис:
ereg (шаблон, строка [, совпадения])
Поиск производится с учетом регистра алфавитных символов.
Пример: поиск в строках доменов .соm:
$is_com = ereg("(\.)(com$)", $email);
// Функция возвращает TRUE, если $email завершается символами ".com"
Параметр совпадения содержит массив совпадений для всех подвыражений, заключенных в регулярном выражении в круглые скобки.
Слайд 10POSIX-совместимые функции РНР для работы с регулярными выражениями
Пример: разделение
URL на несколько сегментов:
$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;
Результат:
http://www.apress.com
http://www
apress
com
Слайд 11POSIX-совместимые функции РНР для работы с регулярными выражениями
Функция ereg_replace(
)
- ищет в заданной строке совпадение для шаблона и
заменяет его новым фрагментом.
После выполнения замены функция возвращает модифицированную строку.
Если совпадения отсутствуют, строка остается в прежнем состоянии.
Функция ereg_replace( ), как и еrеg( ), учитывает регистр символов.
Синтаксис:
ereg_replace (шаблон, замена, строка)
Пример:
$copy_date = "Copyright 2007";
$copy_date = ereg_replace("([0-9]+)", "2008", $copy_date);
print $copy_date; // Вывод строки "Copyright 2008"
Слайд 12POSIX-совместимые функции РНР для работы с регулярными выражениями
Обратные ссылки
- обратные ссылки на части основного выражения, заключенные в круглые
скобки,
- похожи на элементы необязательного параметра совпадения функции еrеg( )
- записываются в виде \0, \1, \2 и т. д., где \0 соответствует всей строке, \1 — успешному совпадению первого подвыражения и т. д.
- выражение может содержать до 9 обратных ссылок.
Пример: все адреса в тексте заменяются работающими гиперссылками:
$url = "Yandex (http://www.yandex.ru");
$url = ereg_replace("http://(([A-Za-z0-9.\])*)", "
\\0", $url);
print $url;
// Выводится строка:
// Yandex (
http://www.yandex.ru)
Слайд 13POSIX-совместимые функции РНР для работы с регулярными выражениями
Функция eregi(
)
- ищет в заданной строке совпадение для шаблона. Синтаксис:
eregi
(шаблон, строка [, совпадения])
- поиск производится без учета регистра алфавитных символов.
- особенно удобна при проверке правильности введенных строк (например, паролей).
Пример:
$password = "abc";
if (! eregi("[[:alnum:]]{8,10}, $password) :
print "Пароль не принят! Пароль должен содержать от 8 до 10 символов.";
endif;
Слайд 14POSIX-совместимые функции РНР для работы с регулярными выражениями
Функция eregi_replасе(
)
- работает точно так же, как ereg_replace( ), но
без учета регистра символов. Синтаксис:
eregi_replace (шаблон, замена, строка)
Слайд 15POSIX-совместимые функции РНР для работы с регулярными выражениями
Функция split(
)
разбивает строку на элементы, границы которых определяются по заданному
шаблону. Синтаксис:
split (шаблон, строка [, порог])
Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка слева направо.
Если шаблон содержит алфавитные символы, функция spl it( ) работает с учетом регистра символов.
Функция spliti( )
-работает так же, как split( ), но не учитывает регистра символов. Синтаксис:
spliti (шаблон, строка [, порог])
Слайд 16POSIX-совместимые функции РНР для работы с регулярными выражениями
Пример:
$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"
Слайд 17POSIX-совместимые функции РНР для работы с регулярными выражениями
Функция sql_regcase(
)
- заключает каждый символ входной строки в квадратные скобки
и добавляет к нему парный символ. Синтаксис:
sql_regcase (строка)
Если алфавитный символ существует в двух вариантах (верхний и нижний регистры), выражение в квадратных скобках будет содержать оба варианта; в противном случае исходный символ повторяется дважды.
Функция sql_regcase( ) удобна при использовании РНР с программными пакетами, поддерживающими регулярные выражения в одном регистре.
Пример:
$version = "php 4.0";
print sql_regcase($version);
// Вывод - строка [Pp][Hh][Pp][ ][44][..][00]
Слайд 18Синтаксис регулярных выражений в стиле Perl
- является отдаленным потомком реализации
POSIX, вследствие чего синтаксис POSIX почти совместим с функциями регулярных
выражений стиля Perl.
В регулярных выражениях Perl могут использоваться все квантификаторы для регулярных выражений POSIX.
Примеры:
/food/
/fo+/
/fo{2,4}/
Слайд 19Синтаксис регулярных выражений в стиле Perl
Метасимволы
Метасимвол - алфавитный символ с
префиксом \ — признаком особой интерпретации следующего символа. Примеры:
/([\d]+)000/
//
/sa\b/ -
слово заканчивается на sa
/sa\B/
Слайд 20Синтаксис регулярных выражений в стиле Perl
Модификаторы
- перечисляются сразу же после
регулярного выражения — например, /stroka/i.
Примеры модификаторов
m Фрагмент текста интерпретируется как состоящий
из нескольких «логических строк». По умолчанию специальные символы ^ и $ совпадают только в начале и в конце всего фрагмента. При включении «многострочного режима» при помощи модификатора m^ и $ будут совпадать в начале и в конце каждой логической строки внутри фрагмента
s По смыслу противоположен модификатору m — при поиске фрагмент интерпретируется как одна строка, а все внутренние символы новой строки игнорируются
i Поиск выполняется без учета регистра символов
Слайд 21Функции РНР для работы с регулярными выражениями (Perl-совместимые)
В РНР существует
пять функций поиска по шаблону с использованием Perl-совместимых регулярных выражений.
Функция
preg_match( )
ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис:
preg_match (шаблон, строка [, совпадения})
При передаче параметра совпадения массив заполняется совпадениями различных подвыражений, входящих в основное регулярное выражение.
Слайд 22Функции РНР для работы с регулярными выражениями (Perl-совместимые)
В РНР существует
пять функций поиска по шаблону с использованием Perl-совместимых регулярных выражений.
Функция
preg_match( )
ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис:
preg_match (шаблон, строка [, совпадения})
При передаче параметра совпадения массив заполняется совпадениями различных подвыражений, входящих в основное регулярное выражение.
Слайд 23Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Пример: проведение поиска
без учета регистра:
$linе = "Vi is the greatest word processor
ever created!";
// Выполнить поиск слова "Vi" без учета регистра символов:
if (preg_match("/\bVi\b\i", $line, $match)) :
print "Соответствие обнаружено!";
endif;
Слайд 24Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция preg_match_all( )
- находит все совпадения шаблона в заданной строке.
Синтаксис:
preg_match_all (шаблон, строка,
совпадения [, порядок])
Пример: найти весь текст, заключенный между тегами HTML ...:
$user_info = "Name: Rasmus Lerdorf
Title: PHP Guru";
preg_match_all ("/(.*)<\/b>/m", $userinfo, $pat_array);
print $pat_array[0][0]."
".pat_array[0][1]."\n":
Результат:
Rasmus Lerdorf
PHP Guru
Слайд 25Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция preg_match_all( )
Порядок сохранения в массиве совпадения текста, совпавшего с подвыражениями, определяется
необязательным параметром порядок. Этот параметр может принимать два значения:
1. PREG_PATTERN_ORDER — используется по умолчанию, если параметр порядок не указан. Порядок, определяемый значением PREG_PATTERN_ORDER: первый элемент (с индексом 0) содержит массив совпадений для всего регулярного выражения, второй элемент (с индексом 1) содержит массив всех совпадений для первого подвыражения в круглых скобках и т. д.;
2. PREG_SET_ORDER — порядок сортировки массива: первый элемент (с индексом 0) содержит массив с текстом, совпавшим со всеми подвыражениями в круглых скобках для первого найденного совпадения. Второй элемент (с индексом 1) содержит аналогичный массив для второго найденного совпадения и т. д.
Слайд 26Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция preg_replace( )
- работает точно так же, как и ereg_replасе( ), за
одним исключением — регулярные выражения могут использоваться в обоих параметрах, шаблон и замена.
Синтаксис:
preg_replace ( шаблон, замена, строка [, порог])
Необязательный параметр порог определяет максимальное количество замен в строке. Параметры шаблон и замена могут представлять собой масивы. Функция preg_replace( ) перебирает элементы обоих массивов и выполняет замену по мере их нахождения.
Слайд 27Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция preg_replace( )
- работает точно так же, как и ereg_replасе( ), за
одним исключением — регулярные выражения могут использоваться в обоих параметрах, шаблон и замена.
Синтаксис:
preg_replace ( шаблон, замена, строка [, порог])
Необязательный параметр порог определяет максимальное количество замен в строке. Параметры шаблон и замена могут представлять собой масивы. Функция preg_replace( ) перебирает элементы обоих массивов и выполняет замену по мере их нахождения.
Слайд 28Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция preg_split( )
- аналогична split( ) за одним исключением — параметр шаблон
может содержать регулярное выражение.
Синтаксис:
preg_split (шаблон, строка [, порог [, флаги]])
Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка.
Слайд 29Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Пример: выборка информации
из переменной.
$user_info="+WJ+++Gilmore+++++wjgilmore@hotmail.com
+++++++Columbus+++OH";
$fields = preg_split("/\+{1.}/", $user_info);
while ($x < sizeof($fields)):
print $fields[$x].
"
";
$x++;
endwhile;
Результат:
WJ
Gilmore
wjgilmore@hotmail.com
Columbus
OH
Слайд 30Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция preg_grep( )
- перебирает все элементы заданного массива и возвращает все элементы,
в которых совпадает заданное регулярное выражение. Синтаксис:
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]. "
";
$х++;
endwhile;
Результат:
pasta
potatoes
Слайд 31Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Дополнение и сжатие
строк
В процессе форматирования часто возникает необходимость в изменении длины строки
посредством дополнения или удаления символов. В РНР существует несколько функций, предназначенных для решения этой задачи.
Функция chop( )
- возвращает строку после удаления из нее завершающих пропусков и символов новой строки.
Пример:
$header = "Table of Contents\n\n";
$header = chop($header);
// $header = "Table of Contents"
Слайд 32Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция str_pad( )
- выравнивает строку до определенной длины заданными символами и возвращает
отформатированную строку. Синтаксис:
str_pad (строка, длина_дополнения [, дополнение [, тип_дополнения]])
Если параметр дополнение не указан, строка дополняется пробелами. В противном случае строка дополняется заданными символами.
По умолчанию строка дополняется справа; тем не менее, можно передать в параметре тип_дополнения константу STR_PAD_RIGHT, STR_PAD_LEFT или STR_PAD_BOTH, что приведет к дополнению строки в заданном направлении.
Слайд 33Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Пример:
$food = "salad";
print
str_pad ($food, 5): // Выводит строку "salad "
Пример:
$header
= "Table of Contents";
print str_pad ($header, 5, "=+=+=", STR_PAD_BOTH);
// В браузере выводится строка
=+=+= Таbе of Contents=+=+="
Слайд 34Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция trim( )
- удаляет все пропуски с обоих краев строки и возвращает
полученную строку. Синтаксис:
trim (строка)
К числу удаляемых пропусков относятся и специальные символы \n, \r, \t, \v и \0.
Функция ltrim( )
- удаляет все пропуски и специальные символы с левого края строки и возвращает полученную строку. Синтаксис:
ltrim (строка)
Функция удаляет те же специальные символы, что и функция trim( ).
Определение длины строки
Функция strlen( ): strlen (строка)
Слайд 35Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Сравнение двух строк
Функция
strcmp( )
- сравнивает две строки с учетом регистра символов.
Синтаксис:
strcmp (строка1, строка2)
После завершения сравнения strcmp( ) возвращает одно из трех возможных значений:
0, если строка1 и строка2 совпадают;
< 0, если строка1 меньше, чем строка2;
> 0, если строка2 меньше, чем строка1.
Пример:
$string1 = "butter";
$string2 = "butter";
if ((strcmp($string1, $string2)) == 0) :
print "Strings are equivalent!";
endif;
Слайд 36Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция strcasecmp( )
-
работает точно так же, как strcmp( ), но регистр символов
при сравнении не учитывается.
Пример
$string1 = "butter";
$string2 = "Butter";
if ((strcmp($string1, $string2)) == 0) :
print "Strings are equivalent!";
endif;
Слайд 37Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Обработка строковых данных
без применения регулярных выражений
Функция strtok( )
- разбивает строку на
лексемы по разделителям, заданным вторым параметром. Синтаксис:
strtok (строка, разделители)
Чтобы полностью разделить строку, функцию необходимо последовательно вызвать несколько раз. При очередном вызове функция выделяет из строки следующую лексему. При этом параметр строка задается всего один раз — функция отслеживает текущую позицию в строке до тех пор, пока строка не будет полностью разобрана на лексемы или не будет задан новый параметр строка.
Слайд 38Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Пример: разбиение строки
по нескольким разделителям:
$info = "John Smith: JohnSmith@hotmail.com | Phoenix, Arizona";
//
Ограничители - двоеточие (:), вертикальная черта (|) и запятая (,)
$tokens = ":|,";
$tokenized = strtok($info, $tokens);
// Вывод элементов массива $tokenized
while ($tokenized) :
echo "Element = $tokenized
";
// При последующих вызовах strtok первый аргумент не передается
$tokenized = strtok($tokens);
endwhile;
Слайд 39Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Пример: разбиение строки
по нескольким разделителям:
Результат:
Element = John Smith
Element = JohnSmith@hotmail.com
Element = Phoenix
Element
= Arizona
Слайд 40Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция parse_str( )
- выделяет в строке пары «переменная-значение» и присваивает значения переменных
в текущей области видимости. Синтаксис:
parse_str (строка)
Функция parse_str( ) особенно удобна при обработке URL, содержащих данные форм HTML или другую расширенную информацию.
Пример: анализируется информация, переданная через URL ( в гиперссылке, либо введена в форму HTML):
$url = "fname=John&lname=Smith&zip=43210";
parse_str($url);
// После выполнения parse_str( ) доступны следующие переменные:
// $fname = "John":
// $lname = "Smith";
// $zip = "43210"
Слайд 41Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция explode( )
- делит строку на элементы и возвращает эти элементы в
виде массива. Синтаксис: explode (разделитель, строка [, порог])
Разбиение происходит по каждому экземпляру разделителя, причем количество полученных фрагментов может ограничиваться необязательным параметром порог.
Пример:
$info = "wilson | baseball |indians";
$user = explode("|", $info);
// $user[0] = "wilson";
// $user[1] = "baseball";
// $user[2] = "Indians";
Функция explode( ) практически идентична функции регулярных выражений POSIX split( ). Различие: только при вызове split( ) допускается передача регулярных выражений в параметрах.
Слайд 42Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция implode( )
-
объединяет массив в строку. Синтаксис:
implode (разделитель, фрагменты)
Пример:
$ohio_cities = array ("Columbus",
"Youngstown", "Cleveland", "Cincinnati");
$city_string = implode("l", $ohio_cities);
// $city_string = "Columbus | Youngstown | Cleveland | Cincinnati";
У implode( ) имеется псевдоним — функция join( ).
Слайд 43Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция strpos( )
-
находит в строке первый экземпляр заданной подстроки. Синтаксис: strpos (строка,
подстрока [, смещение])
Параметр смещение задает позицию, с которой должен начинаться поиск. Если подстрока не найдена, strpos( ) возвращает FALSE (0).
Пример: определение позиции первого вхождения даты в файл журнала:
$log = "
206.169.23.11:/www/:2006-08-10
206.169.23.11:/www/logs/:2006-02-04
206.169.23.11:/www/img/:2007-01-31";
// В какой позиции в журнале впервые встречается 2007 год?
$pos = strpos($log, "2007");
//$pos = 95, поскольку первый экземпляр "2007" находится в позиции 95 строки, содержащейся в переменной $log
Слайд 44Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция strrpos( )
-
находит в строке последний экземпляр заданного символа. Синтаксис:
strrpos (строка, символ)
По
возможностям эта функция уступает функции strpos( ), поскольку позволяет искать только отдельный символ, а не всю строку.
Если параметре символ передается строка, при поиске будет использован только ее первый символ.
Слайд 45Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция str_replace( )
-
ищет в строке все вхождения заданной подстроки и заменяет их
новой подстрокой. Синтаксис:
str_replace (подстрока, замена, строка)
Пример: проведение глобальной замены в строке.
Если подстрока ни разу не встречается в строке, исходная строка не изменяется:
$favorite_food = "My favorite foods are ice cream and chicken wings";
$favorite_food = str_replace("chicken_wings", "pizza", $favohte_food);
// $favorite_food = "My favorite foods are ice cream and pizza"
Слайд 46Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция strstr( )
- возвращает часть строки, начинающуюся с первого вхождения заданной подстроки.
Синтаксис:
strstr (строка, подстрока)
Пример: выделение имени домена из URL:
$url = "http://www.yahoo.com"; $domain - strstr($url, ".");
// $domain = ".yahoo.com"
Слайд 47Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция substr( )
- возвращает часть строки, начинающуюся с заданной начальной позиции и
имеющую заданную длину. Синтаксис:
substr (строка, начало [, длина])
Если параметр длина не указан, считается, что подстрока начинается с заданной начальной позиции и продолжается до конца строки.
При использовании функции необходимо учитывать:
если параметр начало >0, возвращаемая подстрока начинается с позиции строки с заданным номером;
если параметр начало <0, возвращаемая подстрока начинается с позиции (длина строки - начало);
если параметр длина >0, в возвращаемую подстроку включаются все символы от позиции начало до позиции начало+длина. Если последняя величина превышает длину строки, возвращаются символы до конца строки;
если параметр длина <0, возвращаемая подстрока заканчивается на заданном расстоянии от конца строки.
Слайд 48Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция substr( )
Параметр начало определяет смещение от первого символа строки; таким образом,
возвращаемая строка в действительности начинается с символа с номером (начало + 1).
Пример: выделение части строки:
$car = "1944 Ford";
$model = substr($car, 6);
// $model = "Ford"
$model = substr($car, 0, 4);
// $model = "1944"
$model = substr($car, 2, -5);
// $model = "44"
Слайд 49Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция substr_count( )
- возвращает количество вхождений подстроки в заданную строку. Синтаксис:
substr_count (строка,
подстрока)
Пример: подсчет количества вхождений подстроки:
$tng_twist = "The rain falls mainly on the plains of Spain";
$count = substr_count($tng_twist, "ain");
// $count = 4
Слайд 50Функции РНР для работы с регулярными выражениями (Perl-совместимые)
Функция substr_replace( )
- заменяет часть строки, которая начинается с заданной позиции.
Если
задан параметр длина, заменяется фрагмент заданной длины; в противном случае производится замена по всей длине заменяющей строки.
Синтаксис:
substr_replace (строка, замена, начало [, длина])
Параметры начало и длина задаются по определенным правилам:
если параметр начало >0, замена начинается с заданной позиции;
если параметр начало <0, замена начинается с позиции (длина строки - начало);
если параметр длина >0, заменяется фрагмент заданной длины;
если параметр длина <0, замена завершается в позиции (длина строки - длина).
Слайд 51Преобразование текста в HTML
Функция nl2br( ) заменяет все символы новой
строки (\n) эквивалентными конструкциями HTML
. Синтаксис:
nl2br (строка)
Символы новой строки
могут быть как видимыми (то есть явно включенными в строку), так и невидимыми (например, введенными в редакторе).
Пример:
$text_recipe = "
Party Sauce recipe:
1 can stewed tomatoes
3 tablespoons fresh lemon juice
Stir together, server cold.";
$html_recipe = nl2br($text_recipe);
print $html_recipe;
Результат:
Party Sauce recipe:
1 can stewed tomatoes
3 tablespoons fresh lemon juice
Stir together, server cold.
Слайд 52Преобразование текста в HTML
Функция htmlentities( )
- преобразует символы в
эквивалентные конструкции HTML. Синтаксис:
htmlentities (строка)
Пример:
$user_input = "The cookbook, entitled 'Cafe
Francaise' costs < $42.25.";
$converted_input = htmlentities($user_input);
// $converted_input = "The cookbook, entitled 'Cafè Française' costs <$42.25.";
Результат:
Функция htmlentities( ) в настоящее время работает только для символов кодировки ISO-8559-1 (ISO-Latin-1).
Слайд 53Преобразование текста в HTML
Функция htmlspecialchars( )
- заменяет некоторые символы,
имеющие особый смысл в контексте HTML, эквивалентными конструкциями HTML. Синтаксис:
htmlspecialchars
(строка)
Функция htmlspecialchars( ) в настоящее время преобразует следующие символы:
& преобразуется в &
" " преобразуется в "
< преобразуется в <
> преобразуется в >.
Функция позволяет предотвратить ввод пользователями разметки HTML в интерактивных web-приложениях (например, в форумах).
Слайд 54Преобразование текста в HTML
Функция htmlspecialchars( )
Пример: удаление потенциально опасных
символов:
$user_input = "I just can't get «enough» of PHP &
those fabulous cooking recipes!";
$conv_input = htmlspecialchars($user_input);
// $conv_input = "I just can't <<enough>> of PHP & those fabulous cooking recipes!"
Если функция htmlspecialchars( ) используется в сочетании с nl2br( ), то последнюю следует вызывать после htmlspecialchars( ), иначе конструкции
, сгенерированные при вызове nl2br( ), преобразуются в видимые символы.
Слайд 55Преобразование текста в HTML
Функция strtr( )
- транслирует строку, то
есть заменяет в ней все символы, входящие в строку источник,
соответствующими символами строки приемник. Синтаксис:
strtr (строка, источник, приемник)
Если строки источник и приемник имеют разную длину, длинная строка усекается до размеров короткой строки.
Альтернативный синтаксис:
strtr (строка, массив)
Параметр массив — ассоциативный массив, ключи которого соответствуют заменяемым подстрокам, а значения — заменяющим подстрокам.
Слайд 56Преобразование текста в HTML
Функция strtr( )
Пример:
$source = array("" =>
"", " => "");
$string = "Today In PHP-Powered News";
print strtr($string,
$source);
// Выводится строка "Today in PHP-Powered News"
Слайд 57Преобразование HTML в простой текст
Функция strip_tags( )
- удаляет из
строки все теги HTML и РНР, оставляя в ней только
текст. Синтаксис:
strip_tags (строка [, разрешенные_тerи])
Пример:
$user_input = "Пример замены полужирного и курсивного текста обычным начертанием.";
$stripped_input = strip_tags ($user_input);
print $stripped_input;
$strip_input = strip_tags ($user_input, "");
print $strip_input;
Слайд 58Преобразование HTML в простой текст
Функция get_meta_tags( )
- предназначена для поиска
в файле HTML тегов МЕТА.
Синтаксис:
get_meta_tags (имя_файла/URL [, включение_пути])
Теги МЕТА содержат
информацию о странице, используемую главным образом поисковыми системами. Эти теги находятся внутри пары тегов ....
Функция get_meta_tags( ) ищет в заголовке документа теги, начинающиеся словом МЕТА, и сохраняет имена тегов и их содержимое в ассоциативном массиве.
Данные тегов МЕТА можно извлекать не только из файлов, находящихся на сервере, но и из других URL.
Слайд 59Преобразование HTML в простой текст
Пример: example.html
Примеры PHP
код, примеры, программирование, web">
">
Скрипт:
$meta_tags = get_meta_tags("example.html");
// Переменная $meta_tags содержит массив:
// $meta_tags["keywords"] = "PHP, код, примеры, программирование, web";
// $meta_tags["description"] = "Ресурс, посвященный программированию на PHP.";
// $meta_tags["author"] = "П.П.Иванов";
Слайд 60Преобразование строки к верхнему и нижнему регистру
Функция strtolower( )
-
преобразует все алфавитные символы строки к нижнему регистру. Синтаксис:
strtolower(строка)
Неалфавитные символы
функцией не изменяются.
Пример:
$sentence = "В этом ПРЕДЛОЖЕНИИ все СЛОВА набраны В НИЖНЕМ регистре.";
$sentence = strtolower($sentence);
Функция strtoupper()
- преобразование к верхнему регистру.
Неалфавитные символы функцией не изменяются.
Слайд 61Преобразование строки к верхнему и нижнему регистру
Функция ucfirst( )
-
преобразует к верхнему регистру первый символ строки — при условии,
что он является алфавитным символом. Синтаксис:
ucfirst (строка)
Неалфавитные символы функцией не изменяются.
Функция ucwords( )
- преобразует к верхнему регистру первую букву каждого слова в строке. Синтаксис:
ucwords (строка)
Неалфавитные символы функцией не изменяются.
«Слово» определяется как последовательность символов, отделенная от других элементов строки пробелами.
Слайд 62Пример: идентификация браузера
Чтобы пользователь мог просматривать страницу в формате, соответствующем
специфике его браузера и операционной системы, из входящего запроса на
получение страницы извлекается информация о браузере и платформе. После получения необходимых данных пользователь перенаправляется на нужную страницу.
Программа определяет тип и версию браузера и операционной системы, после чего выводит полученную информацию в окне браузера.
В стандартной переменной $HTTP_USER_AGENT в строковом формате хранятся различные сведения о браузере и операционной системе пользователя.
Пример:
Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)
Слайд 63Пример: идентификация браузера
Алгоритм:
Определить две функции для идентификации браузера и операционной
системы: browser_info( ) и opsys_info( ).
Функция browser_info( ):
Определить
тип браузера, используя функцию ereg( ).
Воспользоваться конструкцией if/elseif для идентификации следующих браузеров и их версий: Internet Explorer, Opera, Netscape и браузер неизвестного типа.
Вернуть информацию о типе и версии браузера в виде массива.
Функция opsys_info( ) определяет тип операционной системы.
Использовать функцию strstr( ).
Воспользоваться конструкцией if/elseif для идентификации следующих систем: Windows, Linux, UNIX, Macintosh и неизвестная операционная система.
Вернуть информацию об операционной системе.
Слайд 64Пример: идентификация браузера
= "IE";
$browse version = $version[1];
elseif (ereg( 'Opera ([0-9].[0-9]{1,2})'. $agent, $version)):
$browse_type
= "Opera":
$browse_version = $version[1]:
elseif (ereg( 'Mozilla/([0-9].[0-9]{1,2})'. $agent, $version)) :
$browse_type = "Netscape";
$browse_version = $version[1];
else :
$browse_type = "Unknown";
$browse_version = "Unknown";
endif:
return array ($browse_type, $browse_version);
}
Слайд 65Пример: идентификация браузера
function opsys_info($agent) {
if (strstr ($agent, 'win') ) :
$opsys
= "windows";
elseif ( strstr($agent, 'Linux') ) :
$opsys = "Linux";
elseif (
strstr ($agent, 'Unix') ) :
$opsys = "Unix";
elseif ( strstr ($agent, 'Mac') ) :
$opsys = "Macintosh";
$opsys = "Unknown";
endif;
return $opsys;
}
Слайд 66Пример: идентификация браузера
list ($browse_type, $browse_version)=browser_info($HTTP_USER_AGENT);
$operating_sys = opsys_info ($HTTP_USER_AGENT);
print "Browser
Type: $browse_type
";
print "Browser Version: $browse_version
";
print "Operating System: $operating_sys
";
?>
Например, если пользователь работает в браузере Netscape 4.75 на компьютере с системой Windows, будет выведен результат:
Browser Type: Netscape
Browser Version: 4.75
Operating System: Windows