Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Большой текст



жирный текст
большой текст жирный текст,
большой текст жирный текст

Функции для работы с отдельными символами

Функция int ord ($str) - возвращает ASCII-значение первого символа строки $str, функция chr(код) возвращает символ с ASCII кодом:

<?php // Пример str5.php

$str = "PHP";

echo $str[0]; // Выводит 'P'

$str="\n это строка";

if (ord($str) == 10)

print "The first character of \$str is a line feed.\n";

$str=chr(64); //# @

echo $str;

?>

Будет выведено: The first character of $str is a line feed. @

Обратиться к любому символу строки можно также по его индексу.

Следующие функции предназначены для быстрого URL-кодирования и декодирования при передаче данных через интернет.

UrlEncode(string $str)

Функция URL-кодирует строку $str и возвращает результат. Например:

echo "<a href=/script.php?param=".UrlEncode($UserData);

UrlDecode(string $st)

Производит URL-декодирование строки. В принципе, используется значительно реже, чем UrlEncode(), потому что PHP и так умеет перекодировать входные данные автоматически.

HtmlSpecialChars(string $str)

Это функция, которая обычно используется в комбинации с echo. Основное ее назначение - гарантировать, что в выводимой строке ни один участок не будет воспринят как тэг.

Заменяет в строке некоторые символы (такие как амперсант, кавычки и знаки "больше" и "меньше") на их HTML-эквиваленты, так, чтобы они выглядели на странице "самими собой". Самое типичное применение этой функции — формирование параметра value в различных элементах формы, чтобы не было никаких проблем с кавычками, или же вывод сообщения в гостевой книге, если вставлять тэги пользователю запрещено.

StripSlashes(string $str)

Заменяет в строке $str некоторые предваренные слэшем символы на их однокодовые эквиваленты. Это относится к следующим символам: ", ', \ и никаким другим.

AddSlashes(string $str)

Вставляет слэши только перед следующими символами: ', " и \. Функцию очень удобно использовать при вызове eval() (эта функция выполняет строку, переданную ей в параметрах, так, как будто имеет дело с небольшой PHP-программой.

Функция strpbrk(string, char) – ищет в строке символ char и возвращает false или строку, начинающуюся с найденного символа; strtoupper(string) – преобразует строку в верхний регистр; strtolower(string) – преобразует строку в нижний регистр; strrev(string) – возвращает строку string в обратном порядке. Следующий блок кода демонстрирует, как использовать строковые функции PHP.

<?php//str6.php

$string = "Hello World";

$another_string = "Welcome to PHP";

echo strlen($string);

echo strtoupper($another_string);

echo strrev($another_string);

echo strpbrk($string, "W");

?>

Вывод:

WELCOME TO PHP

PHP ot emocleW

World

Первая строка выводит длину строки "Hello World", равную 11. Затем строка "Welcome to PHP" преобразуется в верхний регистр и выводится. Эта строка используется также с функцией strrev для изменения порядка символов строки на обратный. Наконец, функция strpbrk () производит поиск символа "W". Так как первое появление символа происходит в тексте "World", выводится эта строка.

Функции форматных преобразований строк

Язык PHP поддерживает ряд функций вывода, использующих такой же синтаксис, как и их Си -эквиваленты.

string sprintf (string $format [, mixed args]) –

возвращает строку, созданную из аргументов в соответствии со строкой форматирования $format. Строка $format может включать в себя команды форматирования, предваренные символом %. Все остальные символы копируются в выходную строку. Каждый спецификатор формата соответствует одному параметру, указанному после параметра $format.

<? // Пример str7.php Использование sprintf()

$num=5;

$location="tree";

$format = "There are %d monkeys in the %s";

printf($format,$num,$location); // выведет: "There are 5 //monkeys in the tree".

//sprintf(): целые числа с заполнением нулями

$year=3;

$month=10;

$day=11;

$dat = sprintf(" %03d-%03d-%02d ", $year, $month, $day);

echo $dat;

//sprintf(): форматирование валюты

$money1 = 68.75;

$money2 = 54.35;

$money = $money1 + $money2;

echo $money;// will output "123.1";

$formatted = sprintf(" %01.2f", $money);

echo $formatted; //выдаст "123.10"

?>

Вывод:

There are 5 monkeys in the tree 003-010-11 123.1 123.10

Функция printf(string $format [, mixed args,...]) делает то же самое, что и sprintf(), только результирующая строка не возвращается, а направляется в браузер пользователя.

В PHP существует еще несколько функций для выполнения форматных преобразований, среди них - sscanf() и fscanf(), которые часто применяются в Си.

mixed sscanf (string str, string format [, string var1]) - это input-аналог printf(). sscanf() читает из строки str и интерпретирует её в соответствии с форматом format. Любой пробел в строке формата совпадает с любым пробелом в строке ввода.

<? // str8.php Использование sscanf()

$serial = sscanf("SN/23501","SN/%s",&$ser);

// получение серийного номера и даты изготовления

echo $serial,"<br>";

$mandate = "January 01 2011";

list($month, $day, $year) = sscanf($mandate,"%s %d %d");

echo "Item $ser was manufactured on: $year-".substr($month,0,3)."-$day\n";

// функция возвращает количество присвоенных значений.

?>

Вывод:

Item 23501 was manufactured on: 2011-Jan-1

Использование форматных функций в Веб – приложениях ограничено из-за низкой скорости: для разбора строк оказывается выгоднее привлечь регулярные выражения или функцию explode().

Функция array explode (string разделитель, string $str [, int n]) делит строку на элементы и возвращает эти элементы в виде массива. Разбиение $str происходит по разделителям, количество фрагментов может ограничиваться необязательным параметром n.

Ее двойник - функция string implode (string разделитель, array фрагменты) - объединяет массив в строку. Формирование массива из строки и строки из массива продемонстрировано в следующем примере:

<? // str9.php

$info = "Minsk | baseball | indians";

$user = explode("|", $info);

//$user[0]="Minsk";$user[1]="baseball";$user[2]="Indians";

print_r($user);

$cities=array("Colum","Youngstown","Cleveland","Cincinnati");

$city_string = implode("l", $cities);

//$city_string="Colum1Youngstown1Cleveland1Cincinnati";

echo "<br>",$city_string;

?>

Вывод:

Array ([0] => Minsk [1] => baseball [2] => indians)

ColumlYoungstownlClevelandlCincinnati

Функция string strtok (string $arg1, string $token) – выполняет лексемизацию строки, в результате которой строка arg1делится на слова (лексемы/tokens), где каждое слово отделено символом из $token. В примере строка "This is an example string", лексемизируeтся на отдельные слова с применением пробела как разделителя.

<? // str10.php

$string = "This is\tan example\nstring";

/* Использовать символы tab и newline как лексемизирующие символы */

$tok = strtok($string," \n\t");

while ($tok) {

echo "Word=$tok<br>";

$tok = strtok(" \n\t");

}

?>

Вывод:

Word=This

Word=is

Word=an

Word=example

Word=string

В параметр token можно поместить несколько лексем.

void parse_str (string $str) - Разбирает str так, как если бы она была строкой запроса, переданной через URL, и устанавливает переменные.

<? // Пример str11.php Использование parse_str()

$str = "first=value &second[]=this+works &second[]=another";

parse_str($str);

echo $first; /* печатает "value" */

echo $second[0]; /* печатает "this works" */

echo $second[1]; /* печатает "another" */

?>

Вывод:

value this works another

getHostByName(domain_name) - преобразует переданное имя домена в IP адрес в формате nnn.nnn.nnn.nnn.

getHostByAddr(ip_address) - Преобразует данный IP адрес в формате nnn.nnn.nnn.nnn в полное имя домена.

Пример. Определяем в какой стране живёт посетитель:

<? //Str12.php

$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);

$countrys=array(ru => Россия, ua => Украина, by => Беларусь);

$array=array_reverse(explode(".",$host));

if(!empty($countrys[$array[0]]))

echo "Ваша страна: ".$countrys[$array[0]];

else echo "Откуда Вы пришли - я не знаю:(";

$ip = gethostbyname('localhost');

echo "<br>",$ip;

?>

Вывод:

Откуда Вы пришли - я не знаю:(

127.0.0.1

Преобразование строк и файлов к формату HTML и наоборот

Функция nl2br() заменяет все символы новой строки (\n) эквивалентными конструкциями HTML <br>. Синтаксис функции: string nl2br (string $str)

Функция htmlentities() преобразует символы в эквивалентные конструкции HTML. Синтаксис функции: string htmlentities (string $str)

Функция string htmlspecialchars (string $str) заменяет некоторые символы, имеющие особый смысл в контексте HTML, эквивалентными конструкциями HTML. Функция htmlspecialchars() преобразует следующие символы: & преобразуется в &amp; " " преобразуется в &quot; < преобразуется в &lt; > преобразуется в &gt;.

В частности, эта функция позволяет предотвратить ввод пользователями опасных символов в форумах. Следующий пример демонстрирует удаление потенциально опасных символов функцией htmlspeclalchars():

<?php //str14.php

$text= " Мишка косолапый

По лесу идет ";

print $text;

// Преобразовать символы новой строки "\n" в <br>

$htinl = nl2br($text);

print $htinl;

$input = "The cookbook, entitled Cafe Francaise' costs < $42.25.";

echo "input:", $input;

$conv = htmlentities($input);

// $conv = "The cookbook, entitled 'Caf&egrave;

// Frac&ccediliaise' costs &lt; 42.25.";

echo "<br> conv:",$conv;

$str = "A 'quote' is <b>bold</b>";

echo "<br>str:", $str,"<br>";

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;

echo htmlentities($str),"<br>";

// Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;

echo htmlentities($str, ENT_QUOTES);

//Функция htmlspecialchars() преобразует следующие символы:

//& преобразуется в &amp; " " преобразуется в &quot; < преобразуется в &lt; > в &gt;.

// пример удаление потенциально опасных символов функцией htmlspeclalchars():

$input = "I just can't get of PHP & those fabulous cooking recipes!";

echo "<br>input:", $input;

$conv = htmlspecialchars($input);

// $conv_input = "I just can't &lt;&lt;enough&gt;&gt; of PHP &amp those fabulous cooking recipes!"

echo "<br> conv:",$conv;

?>

Если функция htmlspecialchars() используется в сочетании с nl2br(), то последнюю следует вызывать после htmlspecialchars(). В противном случае конструкции <br>, сгенерированные при вызове nl2br(), преобразуются в видимые символы.

Функция string get_html_translation_table (int таблица) обеспечивает удобные средства преобразования текста в эквиваленты HTML. Функция возвращает одну из двух таблиц преобразования, определяемых параметром таблица, и используемых в работе стандартных функций htmlspecialchars() и htmlentities(). Параметр таблица принимает одно из двух значений: HTML_ENTITIES или HTML_SPECIALCHARS.

В примере функция используется при преобразовании текста в код HTML:

$string = "La pasta e il piatto piu amato in Italia";

$translate = get_html_translation_table(HTML_ENTITIES);

print strtr($string, $translate);

// Специальные символы преобразуются в конструкции HTML

// и правильно отображаются в браузере.

Преобразование HTML в простой текст

Функция string strip_tags (string строка [, string разрешенные_тerи]), удаляет из строки все теги HTML и РНР, оставляя только текст и разрешенные символы. то помогает решить задачу удаления потенциально опасных символов из сообщений на форумах или в гостевых книгах.

Функция get_meta_tags() предназначена для поиска в файле HTML тегов МЕТА. Синтаксис функции:

array get_meta_tags (string имя_файла/URL [, int включение_пути])

Теги МЕТА содержат информацию о странице, используемую главным образом поисковыми системами. Эти теги находятся внутри пары тегов <head>...</head>. Применение тегов МЕТА продемонстрировано в следующем фрагменте:

<html>

<head>

<title>PHP Recipes</title>

<meta name="keywords" content="gourmet. PHP, food. code, recipes, chef, programming, web">

<meta name="description" content="PHP Recipes provides savvy readers with the latest in PHP programming and gourmet cuisine!">

<meta name="author" content="WJ Gilmore">

</head>

Функция get_meta_tags() ищет в заголовке документа теги, начинающиеся словом МЕТА, и сохраняет имена тегов и их содержимое в ассоциативном массиве. Ниже продемонстрировано применение этой функции к файлу example.html.

<?php>

$meta_tags = get_meta_tags("example.html");

print_r $meta_tags;

?>

// Переменная $meta_tags содержит массив со следующей информацией:

// $meta_tags["keywords"] = "gourmet. PHP. food. code, recipes, chef, programming. Web":

// $meta_tags["description"] = "PHP Recipes provides savvy readers with the latest in PHP

programming and gourmet cuisine";

// $meta_tags["author"] = "WJ Gilmore";

Данные тегов МЕТА можно извлекать не только из файлов, находящихся на сервере, но и из других URL.

Преобразование строки к верхнему и нижнему регистру

В РНР существует четыре функции, предназначенных для изменения регистра строки: strtolower(); strtoupper(); ucfirst(); ucwords().

Функция string strtolower(string $str) преобразует все алфавитные символы строки к нижнему регистру.

$sentence = "COOKING and PROGRAMMING PHP are my TWO favorite pastimes!";

$sentence = strtolower($sentence);

// $sentence= "cooking and programming php are my two favorite pastimes!"

$sentence = "cooking and programming PHP are my two favorite pastimes!";

$sentence = strtoupper($sentence);

// $sentence= "COOKING AND PROGRAMMING PHP ARE MY TWO FAVORITE PASTIMES!"

Преобразование к верхнему регистру выполняется функцией string strtoupper ($str)

Функция ucfirst(string $str) преобразует к верхнему регистру первый символ.

Функция ucwords(string $str) преобразует к верхнему регистру первую букву каждого слова в строке.

Хэш-функции

md5(string $str)

Возвращает хэш-код строки $str, основанный на алгоритме под названием "MD5 Message-Digest Algorithm". Хэш-код — это просто строка, практически уникальная для каждой из строк $str. То есть вероятность того, что две разные строки, переданные в $str, дадут нам одинаковый хэш-код, стремится к нулю.

Если длина строки $str может достигать нескольких тысяч символов, то ее MD5-код занимает максимум 32 символа.

Для чего нужен хэш-код и, в частности, алгоритм MD5? Например, для проверки паролей на истинность.

Пусть, к примеру, есть система со многими пользователями, каждый из которых имеет свой пароль. Можно, хранить эти пароли в обычном или зашифрованном виде в файле, но это небезопасно. В файле паролей будем хранить не сами пароли, а их (MD5) хэш-коды. При попытке пользователя войти в систему вычислим хэш-код введенного им пароля и сравним его с тем, который записан у нас в файле или базе данных. Если коды совпадут, значит, все в порядке.

Конечно, при вычислении хэш-кода какая-то часть информации о строке $str безвозвратно теряется. И именно это позволяет нам не опасаться, что злоумышленник, получивший файл паролей, сможет его когда-нибудь расшифровать. Ведь в нем нет самих паролей, нет даже их каких-то связных частей!

Пример использования алгоритма хеширования MD5:

<?php

$pass_a = "MySecret";

$pass_b = "MySecret";

//Выводим хеш-код строки MySecret($pass_a) - исходный пароль

echo "<b>Хеш-код исходного пароля '$pass_a':</b><b style=\"color:green\">".md5($pass_a)."</b><br>";

//Выводим хеш-код строки MySecret($pass_b)-верифицируемый пароль

echo "<b>Хеш-код верифицируемого пароля '$pass_b':</b><b style=\"color:green\">".md5($pass_b)."</b><br>";

// Сравниваем хеш-коды MD5 исходного и верифицируемого пароля

echo "<h3>Проверяем истинность введенного пароля:</h3>";

if(md5($pass_a)===md5($pass_b))

echo "<h3 style=\"color:green\">Пароль верный! (Хеш-коды совпадают)</h3>";

else echo "<h3 style=\"color:red\">Пароль неверный! (Хеш-коды не совпадают)</h3>"

// выводит: Пароль верный! (Хеш-коды совпадают)

// Попробуйте изменить значение строки $pass_b:

?>

Функция crc32() вычисляет 32-битную контрольную сумму строки $str. Результат ее работы — 32 битное (4-байтовое) целое число. Эта функция работает гораздо быстрее md5(), но в то же время выдает гораздо менее надежные "хэш-коды" для строки.

Установка локальных настроек

Локалью будем называть совокупность таких локальных настроек системы, как формат даты и времени, язык, кодировка.

Для установки локали используется функция SetLocale():

SetLocale(string $category, string $locale)

Функция устанавливает текущую локаль, с которой будут работать функции преобразования. Параметр $category определяет класс функций, на которые влияет локаль и может принимать следующие строковые значения:

LC_CTYPE — активизирует указанную локаль для функций перевода в верхний/нижний регистры; LC_NUMERIC — активизирует локаль для функций форматирования дробных чисел, задает разделитель целой и дробной части в числах; LC_TIME — задает формат вывода даты и времени по умолчанию; LC_ALL — устанавливает все вышеперечисленные режимы.

Параметр $locale задает локаль, по установленному в системе уникальному имени, по которому к ней можно обратиться. Именно оно и фиксируется в этом параметре. Если величина $locale равна пустой строке "", то устанавливается та локаль, которая указана в глобальной переменной окружения, если в этом параметре передается 0, то новая локаль не устанавливается, а просто возвращается имя текущей локали для указанного режима.

Часто встречается ситуация, когда нам требуется преобразовать строку из одной кодировки кириллицы в другую. Например, мы в программе сменили локаль: была кодировка windows, а стала — KOI8-R. Но строки-то остались по-прежнему в кодировке WIN-1251, а значит, для правильной работы с ними нам нужно их перекодировать в KOI8-R. Для этого и служит функция преобразования кодировок.

convert_cyr_string(string $str, char $from, char $to);

Функция переводит строку $str из кодировки $from в кодировку $to. Конечно, это имеет смысл только для строк, содержащих "русские" буквы, т. к. латиница во всех кодировках выглядит одинаково. Разумеется, кодировка $from должна совпадать с истинной кодировкой строки, иначе результат получится неверным. Значения $from и $to — один символ, определяющий кодировку:

k — koi8-r; w — windows-1251; i — iso8859-5; a — x-cp866; d — x-cp866;

Регулярные выражения

Появление Web породило необходимость в эффективных средствах поиска данных, которые бы позволяли быстро находить нужную информацию. Одним из способов поиска являются механизмы поиска по шаблону, которые решают следующие основные задачи:

-поиск строк, в точности совпадающих с заданным шаблоном;

-поиск фрагментов строк, совпадающих с заданным шаблоном;

-замену строк и подстрок по шаблону;

-поиск строк, с которыми заданный шаблон не совпадает.

Базовым средством для поиска по шаблону являются регулярные выражения. Регулярное выражение представляет собой последовательность символов, применяемых для поиска искомого текста. Простейшее регулярное выражение совпадает с одним или несколькими символами строки, например, последовательность мan совпадает в любой строке, содержащей эти символы (например, mango, man).

Символы, указывающие расположение искомого элемента в строке. Служебные символы $ и ^ не совпадают с символами, а указывают позиции в строке. Например, выражение р$ означает строку, которая завершается символом р, а выражение ^р - строку, начинающуюся с символа р.

Escape последовательности.

\. – Шаблону соответствует знак точки в строке.

\n – Символ перевода строки. Строка\nЕще строка

\r – Символ возврата каретки. Текст\r

\t – Символ табуляции. \tКрасная строка

\v – Символ вертикальной табуляции. \vнекоторый текст

Задание группы символов.

Квадратные скобки ([ ]) означают “любой символ из перечисленных в скобках”. Ниже перечислены некоторые часто используемые интервалы, с помощью знака -:

Существует класс служебных символов, обозначающих количество повторений отдельного символа или конструкции, заключенной в квадратные скобки. Эти служебные символы (+, * и {...}) называются квантификаторами. Принцип их действия проще всего пояснить на примерах:

р+ означает один или несколько символов р, стоящих подряд;

р* означает ноль и более символов р, стоящих подряд;

р? означает ноль или один символ р;

р{2} означает два символа р, стоящих подряд;

р{2,3} означает от двух до трех символов р, стоящих подряд;

р{2,} означает два и более символов р, стоящих подряд.

В группе символов ^ соответствует отрицанию последующих символов, то есть указывает символы, не соответствующие шаблону. [^\n\t]

Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).

Служебный символ. (точка) означает <любой символ>. Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.

Логическое определение.

| – подобен оператору || (OR) в логическом выражении. Оператор | (или) проверяет совпадение одной из нескольких альтернатив. Например, регулярное выражение php | my проверяет строку на наличие php или my.

() – Логическая группировка выражений, которая (может)+ повторяться.

Объединение служебных символов приводит к появлению более сложных выражений. Рассмотрим несколько примеров:

^.{2}$ - любая строка, содержащая ровно два символа;

<b>(.*)</b> - произвольная последовательность символов, заключенная между <b> и </b >;

p(hp)* - символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).

Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. В этом случае служебные символы экранируются обратной косой чертой (\).

Perl считается одним из лучших языков обработки текстов. Разработчики РHР сделали синтаксис регулярных выражений Perl доступным для пользователей РНР. Регулярные выражения из нескольких символов в стиле Perl записываются в косых скобках. Рассмотрим простой пример: /stud/. Если записать /stud/i, поиск осуществляется без учета регистра. /^stud/i означает, что stud должно находится в начале слова (student), а /stud$/ - в конце (restud). Регулярное выражение /^$/i соответствует пустой строке.

Квадратные скобки /[абвг ]/ означают “любой один символ а,б,в или г из перечисленных в скобках”. Для создания регулярных выражений могут быть использованы интервалы. Ниже перечислены некоторые интервалы, задаваемые с помощью знака -:

/[0-9]/ - совпадает с любой десятичной цифрой от 0 до 9;

/[a-z]/ - совпадает с любым символом нижнего регистра от а до z;

/[A-Z]/ - совпадает с любым символом верхнего регистра от А до Z;

/[a -Z]/ - совпадает с любым символом нижнего или верхнего регистра от а до Z.

Специальные символы представляет собой алфавитный символ с префиксом \ - признаком особой интерпретации следующего символа:

\d - обозначает любую десятичную цифру;

\D - обозначает любой символ кроме десятичной цифры;

\w - алфавитно-цифровой символ

\W - символ, не являющийся алфавитно-цифровым

\s - пробельный символ

\S - символ не являющийся пробельным

\. – Шаблону соответствует знак точки в строке.

\n – Символ перевода строки. Строка\nЕще строка

\r – Символ возврата каретки. Текст\r

\t – Символ табуляции. \tКрасная строка

\\ – Обратный слеш

Еще один символ \b, совпадает с границами слов: /sa\b/. Противоположный символ, \В, совпадает с чем угодно, кроме границы слова: /sa\B/

Символы +, * и {...}, обозначающие количество повторений отдельного символа или конструкции, заключенной в квадратные скобки, называются квантификаторами. Принцип их действия проще всего пояснить на примерах:

[р]+ означает один или несколько символов р, стоящих подряд;

[р]* означает ноль и более символов р, стоящих подряд;

[р]? означает ноль или один символ р;

[р]{2} означает два символа р, стоящих подряд;

[р]{2,3} означает от двух до трех символов р, стоящих подряд;

[р]{2,} означает два и более символов р, стоящих подряд.

Шаблон /stu+/ совпадает с последовательностью stu, за которой могут следовать дополнительные символы u. Рассмотрим другой пример использования квантификатора: /st{2,4}/. Этот шаблон совпадает с символом s, за которым следуют от 2 до 4 экземпляров символа t.

Символ ^ в группе символов соответствует отрицанию последующих символов, то есть указывает символы, не соответствующие шаблону. [^\n\t]

Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).

Служебный символ. (точка) означает любой символ поэтому для поиска точки ее надо экранировать символом \.

Например, выражение /[\d]+/ используется для поиска цифровой подстроки, выражение /([\d]+)000/ может использоваться при поиске денежных сумм.

Шаблон /<([\w]+)>/ совпадает с конструкциями, заключенными в угловые скобки, - например, тёгами HTML.

Подстроки в регулярных выражениях можно группировать при помощи круглых скобок: /домен – (by|ru|uk|com)/ соответствует строке домен – by или другой.

| – подобен оператору || (OR) в логическом выражении. Оператор | (или) проверяет совпадение одной из нескольких альтернатив. () – Логическая группировка выражений, которая (может)+ повторяться.

Perl-совместимые функции РНР для работы с регулярными выражениями

В РНР существует пять функций поиска по шаблону с использованием Perl-совместимых регулярных выражений: preg_match(); preg_match_all(); preg_replace(); preg_split(); preg_grep().

preg_match(pattern, $str, [regs]) – ищет в строке $str соответствия с регулярным выражением pattern, и сохраняет их в массиве regs (если указано). Пример:

<?php

$sub = "abcdef";

$pattern = '/^def/';

preg_match($pattern, $sub, $matches);

print_r($matches);

echo"<br/>";

$pattern = '/def$/';

preg_match($pattern, $sub, $matches);

print_r($matches);

?>

Вывод:

Array()
Array ([0] => def)

Функция preg_replace() может использовать регулярные выражения в обоих параметрах, шаблон и замена. Синтаксис функции preg_replace():

mixed preg_replace (mixed шаблон, mixed замена, mixed строка [, int порог])

Необязательный параметр порог определяет максимальное количество замен в строке. Параметры шаблон и замена могут представлять собой масивы. Функция preg_replace() перебирает элементы обоих массивов и выполняет замену по мере их нахождения.

<?php

$str="Mersedes is а good car ever created!";

// Выполнить поиск слова без учета регистра:

if (preg_match("/mers/i", $str, $match)!=0)

{

print_r($match);

}

$str = "регулярное выражение"; // просто строка

$preg = preg_replace("/р.+е/i", "<i>[вырезано]</i>", $str);

echo "<br/>".$preg;

echo"<br/>";

$string = 'April 15, 2010';

$pattern = '/(\w+) (\d+), (\d+)/i';

$replacement = '${1}1,$3';

echo preg_replace($pattern, $replacement, $string);

?>

Результат выполнения:

Array([0]=>Mers)
[вырезано]
April1,2010

Функция 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_all() найти весь текст, заключенный между тегами HTML:

<?php

preg_match_all("/\(? (\d{3})? \)? (?(1) [\-\s]) \d{3}-\d{4}/x", "Call 555-1212 or 1-800-555-1212", $phones);

print_r ($phones);

echo "<br/>";

$html = "<b>bold text</b><a href=howdy.html>click me</a>";

preg_match_all("/(<([\w]+)[^>]*>)(.*?)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);

foreach ($matches as $val) {

echo "matched: ". $val[0]. "\n";

echo "part 1: ". $val[1]. "\n";

echo "part 2: ". $val[2]. "\n";

echo "part 3: ". $val[3]. "\n";

echo "part 4: ". $val[4]. "\n\n";

}

echo "<br/>";

$userinfo = "Name: <b>Romanchik Valery</b> <br> Title: <b>PHP Тeacher</b>";

preg_match_all ("/<b>(.*)<\/b>/U", $userinfo, $pat_array);

print_r ($pat_array);

print "<br/>".$pat_array[0][0]." <br> ".$pat_array[0][1]."\n";

?>

Результат:

Array ([0] => Array ([0] => 555-1212 [1] => 800-555-1212) [1] => Array ([0] => [1] => 800))
matched: bold text part 1: part 2: b part 3: bold text part 4:

matched: click me part 1: part 2: apart3:click me part4:
Array ([0] => Array ([0] => Romanchik Valery [1] => PHP Тeacher) [1] => Array ([0] => RomanchikValery[1]=>PHPТeacher))
RomanchikValery
PHP Тeacher

Функция array preg_split (string шаблон, string $str[, int порог [, int флаги]]) разбивает строку $str в массив посредством регулярного выражения. Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка. В следующем примере функция preg_split() используется для выборки информации из переменной.

<?php

$inf="[email protected]+++++bsu.by";

$fields = preg_split("/[\+]{1,}/", $inf);

print_r ($fields);

$i=0;

while ($i < sizeof($fields)){

print $fields[$i]. "<br/>";

echo $i++."<br/>";

}

?>

Результат:

Array([0]=>[1]=>Romanchik[2]=>VS[3]=>@gmail.com[4]=>bsu.by)

Romanchik

VS

@gmail.com

bsu.by

Функция array preg_grep (string $pattern, array $mas) перебирает все элементы заданного массива и возвращает в виде массива все элементы, в которых совпадает заданное регулярное выражение. Пример использования функции для поиска в массиве слов, начинающихся на р:

<?php

$foods = array ("pasta", "steak", "fish", "potatoes");

// Поиск элементов, начинающихся с символа "р".

// за которым следует один или несколько символов

$pfoods = preg_grep("/p(\w+)/", $foods);

print_r($pfoods);

echo "<br/>";

$i = 0;

while ($i < sizeof($foods)) {

print $pfoods[$i]. "<br>";

$i++;}

?>

Результат:

Array([0]=>pasta[3]=>potatoes)

pasta

Potatoes

Регулярные выражения - мощный инструмент для поиска и организации данных, как, например, проверка адреса электронной почты на корректность или поиск URL. Но в то же время регулярные выражения работают медленнее других функций PHP. Например, для перевода целой строки в заглавные буквы можно написать следующее:

<?

$data = ereg_replace ("[a-z]", "[A-Z]", $data);

print $data;

$data = strtoupper ($data);

?>

Медленная функция ereg_replace() потратит много времени на задачу, с которой функция strtoupper() справилась бы быстрее. Всегда следует искать более "лёгкую" замену регулярным выражениям, поскольку скорость выполнения вашего скрипта в таких случаях резко возрастает. Еще один способ замедлить выполнение Веб – приложения состоит в использовании функций форматированного ввода – вывода типа printf(), sscanf().

Функции даты и времени

Базовые функции PHP для даты и времени позволяют форматировать отметку времени для применения в запросах базы данных или просто для вывода даты и времени в окне браузера. PHP включает следующие функции даты и времени:

date(format) – возвращает текущее время сервера, форматированное согласно заданному множеству параметров format.

checkdate(month, day, year) – проверяет заданную дату. Успешная проверка означает, что год year находится между 0 и 32767, месяц month – между 1 и 12, и правильное количество дней каждого месяца.

time() – возвращает текущее время сервера, измеренное в секундах начиная с 1 января 1970 г.

Следующая таблица содержит допустимые форматы date():

a выводит "am" или "pm"
A выводит "AM" или "PM"
h часы в 12-часовом формате (01 – 12)
H часы в 24-часовом формате (00 – 23)
g часы в 12-часовом формате без ведущего нуля (1 – 12)
G часы в 24-часовом формате без ведущего нуля (0 – 23)
i минуты (00 – 59)
s секунды (00 – 59)
d день месяца двумя цифрами (01 – 31)
D день недели текстом (Mon – Sun)
l день недели длинным текстом (Monday – Sunday)
F месяц длинным текстом (January – December)
n месяц двумя цифрами (1 – 12)
Y год четырьмя цифрами (2005)
y год двумя цифрами (05)
s порядковые английский суффиксы (th, nd, st)

Следующая страница использует функцию PHP date() для определения и вывода текущего времени сервера и даты:

<?php

echo"<span style='font:10ptarial'>Today is date('lFjY') </span>";

echo "<br/>";

echo "<span style='font:10pt arial'>The current time is: date('g:i:s a')</span>";

?>

Формат даты/времени, выводимый с помощью функции date(), зависит от типов параметров формата, подставленных в функцию. Параметры функции date() можно объединять, разделяя запятой, двоеточием или другими знаками пунктуации, в зависимости от желаемого формата вывода. Все параметры, однако, должны быть заключены в одиночные кавычки. В примере выше время выводится с помощью параметров формата времени g, i, s, и a. Двоеточия и пробелы также вставляют для разделения часов, минут, секунд и признаков am/pm. Функции checkdate() и time() обычно используются в процессах принятия решений.

Математические функции

§ abs() — Модуль числа

§ acos() — Arccos

§ asin() — Arcsin

§ atan() — Arctan

§ ceil() — Округляет дробь в большую сторону

§ cos() — Cos

§ exp() — Exp

§ floor() — Округляет дробь в меньшую сторону

§ fmod() — Возвращает дробный остаток от деления

§ log10() — десятичный логарифм

§ log() — натуральный логарифм

§ max() — Находит наибольшее значение

§ min() — Находит наименьшее значение

§ pi() — Возвращает число Пи

§ pow() — степенное выражение

§ rand() — Генерирует случайное число

§ round()— Округляет число типа float

§ sin() — Sin

§ sqrt() — квадратный корень

§ srand() — Изменяет начальное число генератора псевдослучайных чисел

§ tan() — Taнгенс





Дата публикования: 2014-11-18; Прочитано: 611 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.078 с)...