Основные функции php для работы со строками. Функции работы со строками на php
Функции для работы со строками
Для работы со строками в PHP существует множество полезных функций.
Кратко разберем часть функций для работы со строками.
Базовые строковые функции
strlen(string $st)
Одна из наиболее полезных функций. Возвращает просто длину строки, т. е., сколько символов содержится в $st . Строка может содержать любые символы, в том числе и с нулевым кодом (что запрещено в Си). Пример:
$x = "Hello!";
echo strlen($x); // Выводит 6
strpos(string $where, string $what, int $fromwhere=0)
Пытается найти в строке $where подстроку (то есть последовательность символов) $what и в случае успеха возвращает позицию (индекс) этой подстроки в строке. Необязательный параметр $fromwhere можно задавать, если поиск нужно вести не с начала строки $from , а с какой-то другой позиции. В этом случае следует эту позицию передать в $fromwhere . Если подстроку найти не удалось, функция возвращает false . Однако будьте внимательны, проверяя результат вызова strpos() на false - используйте для этого только оператор === . Пример:
echo strpos("Hello","el"); // Выводит 1
И еще пример:
if (strpos("Norway","rwa") !== false) echo "Строка rwa есть в Norway";
// При сравнении используйте операторы тождественных сравнений (===) (!==) чтобы избежать проблем с определением типов
substr(string $str, int $start [,int $length])
Данная функция тоже востребуется очень часто. Ее назначение - возвращать участок строки $str , начиная с позиции $start и длиной $length . Если $length не задана, то подразумевается подстрока от $start до конца строки $str . Если $start больше, чем длина строки, или же значение $length равно нулю, то возвращается пустая подстрока. Однако эта функция может делать и еще довольно полезные вещи. К примеру, если мы передадим в $start отрицательное число, то будет считаться, что это число является индексом подстроки, но только отсчитываемым от конца $str (например, -1 означает "начиная с последнего символа строки"). Параметр $length , если он задан, тоже может быть отрицательным. В этом случае последним символом возвращенной подстроки будет символ из $str с индексом $length , определяемым от конца строки. Примеры:
$str = "Programmer";
echo substr($str,0,2); // Выводит Pr
echo substr($str,-3,3); // Выводит mer
strcmp(string $str1, string $str2)
Сравнивает две строки посимвольно (точнее, побайтово) и возвращает: 0 , если строки полностью совпадают; -1 , если строка $str1 лексикографически меньше $str2 ; и 1 , если, наоборот, $str1 "больше" $str2 . Так как сравнение идет побайтово, то регистр символов влияет на результаты сравнений.
strcasecmp(string $str1, string $str2)
То же самое, что и strcmp(), только при работе не учитывается регистр букв. Например, с точки зрения этой функции "ab" и "AB" равны.
Функции для работы с блоками текста
Перечисленные ниже функции чаще всего оказываются полезны, если нужно проводить однотипные операции с многострочными блоками текста, заданными в строковых переменных.
str_replace(string $from, string $to, string $str)
Заменяет в строке $str все вхождения подстроки $from (с учетом регистра) на $to и возвращает результат. Исходная строка, переданная третьим параметром, при этом не меняется. Эта функция работает значительно быстрее, чем ereg_replace()
, которая используется при работе с регулярными выражениями PHP, и ее часто используют, если нет необходимости в каких-то экзотических правилах поиска подстроки. Например, вот так мы можем заместить все символы перевода строки на их HTML эквивалент - тэг
:
$st=str_replace("\n","
\n",$str)
Как видим, то, что в строке
\n тоже есть символ перевода строки, никак не влияет на работу функции, т. е. функция производит лишь однократный проход по строке. Для решения описанной задачи также применима функция nl2br() , которая работает чуть быстрее.
string nl2br(string $string)
Заменяет в строке все символы новой строки \n на
\n и возвращает результат. Исходная строка не изменяется. Обратите внимание на то, что символы \r, которые присутствуют в конце строки текстовых файлов Windows, этой функцией никак не учитываются, а потому остаются на старом месте.
WordWrap(string $str, int $width=75, string $break="\n")
Эта функция, появившаяся в PHP4 , оказывается невероятно полезной, например, при форматировании текста письма перед автоматической отправкой его адресату при помощи mail() . Она разбивает блок текста $str на несколько строк, завершаемых символами $break , так, чтобы на одной строке было не более $width букв. Разбиение происходит по границе слова, так что текст остается читаемым. Возвращается получившаяся строка с символами перевода строки, заданными в $break . Пример использования:
php
$
str
=
"Это текст электронного письма, которое нужно будет отправить адресату..."
;
// Разбиваем текст по 20 символов
$
str
=
WordWrap
($
str
,
20
,
"
"
);
echo
$
str
;
// Выводит:
/* Это текст
электронного письма,
которое нужно будет
отправить
адресату... */
?>
strip_tags (string $str [, string $allowable_tags])
Еще одна полезная функция для работы со строками. Эта функция удаляет из строки все тэги и возвращает результат. В параметре $allowable_tags можно передать тэги, которые не следует удалять из строки. Они должны перечисляться вплотную друг к другу. Примеры:
$stripped = strip_tags ($str); // Удаляет все html - теги из строки (текста)
$stripped = strip_tags($str, "
Функции для работы с отдельными символами
Как и в других языках программирования, в PHP можно работать с символами строк отдельно.
Обратиться к любому символу строки можно по его индексу:
$str = "PHP";
echo $str; // Выводит "P"
chr(int $code)
Данная функция возвращает строку, состоящую из символа с кодом $code . Пример:
echo chr(75); //Выводит K
ord($char)
Данная функция возвращает код символа $char . Вот пример:
echo ord("A"); // Выводит 65 - код буквы "A"
Функции удаления пробелов
Иногда трудно даже представить, какими могут быть странными пользователи, если дать им в руки клавиатуру и попросить напечатать на ней какое-нибудь слово. Так как клавиша пробела - самая большая, то пользователи имеют обыкновение нажимать ее в самые невероятные моменты. Этому способствует также и тот факт, что символ с кодом 32, обозначающий пробел, как вы знаете, на экране не виден. Если программа не способна обработать описанную ситуацию, то она, в лучшем случае после тягостного молчания отобразит в браузере что-нибудь типа "неверные входные данные", а в худшем - сделает при этом что-нибудь необратимое.
trim(string $str)
Возвращает копию $str, только с удаленными ведущими и концевыми пробельными символами. Под пробельными символами я здесь и далее подразумеваю: пробел " ", символ перевода строки \n, символ возврата каретки \r и символ табуляции \t. Например, вызов trim(" test\n ") вернет строку "test". Эта функция используется очень широко. Старайтесь применять ее везде, где есть хоть малейшее подозрение на наличие ошибочных пробелов. Поскольку работает она очень быстро.
ltrim(string $st)
То же, что и trim() , только удаляет исключительно ведущие пробелы, а концевые не трогает. Используется гораздо реже.
chop(string $st)
Удаляет только концевые пробелы, ведущие не трогает.
Функции преобразования символов
Web-программирование - одна из тех областей, в которых постоянно приходится манипулировать строками: разрывать их, добавлять и удалять пробелы, перекодировать в разные кодировки, наконец, URL- кодировать и декодировать. В PHP реализовать все эти действия вручную, используя только уже описанные примитивы, просто невозможно из соображений быстродействия. Поэтому-то и существуют подобные встроенные функции.
strtr(string $str, string $from, string $to)
Эта функция применяется не столь широко, но все-таки иногда она бывает довольно полезной. Она заменяет в строке $str все символы, встречающиеся в $from , на их "парные" (то есть расположенные в тех же позициях, что и во $from) из $to .
Следующие несколько функций предназначены для быстрого URL-кодирования и декодирования.
URL-кодирование необходимо для передачи данных через интернет. Например, такое кодирование целесообразно, если вы передаете русскоязычную информацию в качестве параметра скрипта. Также подобное кодирование можно выполнить и для файла, чтобы не возникало коллизий из-за отсутствия поддержки 8-битных кодировок некоторыми серверами. Вот эти функции:
UrlEncode(string $str)
Функция URL-кодирует строку $str и возвращает результат. Эту функцию удобно применять, если вы, например, хотите динамически сформировать ссылку на какой-то сценарий, но не уверены, что его параметры содержат только алфавитно-цифровые символы. В этом случае воспользуйтесь функцией так:
<<< Назад
(Строки (Часть 2)) |
Содержание |
Вперед >>>
(Строки (Часть 4)) |
Есть еще вопросы или что-то непонятно - добро пожаловать на наш | |
|
Программистам очень часто приходится иметь дело с различными функциями работы со строками в php. В разных справочниках представлены все функции, но я хотел бы ограничиться только основными из них.
PHP функция substr - получить часть строки
Когда из строки вам необходимо выделить отрывок заданной длины начиная с заданной позиции, на помощь приходит функция substr. В этой функции через запятую передаются: текст, стартовая позиция и количество символов. Последний параметр не обязателен, и в случае его отсутствия результатом работы функции будет отрывок исходного текста от стартовой позиции до конца строки.PHP функция strlen - узнать длину строки
Эта функция возвращает длину исходной строки в виде целого числа. Этой функцией вы сможете проверить длину введенных пользователем данных, а может быть что-то еще.PHP функция trim - убрать лишние пробелы по краям строки
Функция trim удаляет по краям строки любые пробельные символы, в том числе и символ перевода строки. Так же существуют функции rtrim и ltrim, которые удаляют пробелы вконце иили вначале строки.PHP функция strpos - осуществляет поиск в строке
функция strpos ищет подстроку в строке и в случае успеха возвращает позицию начала этой подстроки. После нахождения первой подстроки поиск прекращается. Порядок аргументов в функции, как вы уже догодались, таков: исходная строка, подстрока, стартовая позиция. Третий параметр не обязателен, но постарайтесь запомнить что он есть.PHP функция strip_tags - удаляет тэги HTML и PHP из строки
Функция strip_tags возвращает строку, очищенную от тегов html и php. Она вам пригодится, когда вы будете писать модуль комментариев на свой сайт, что бы не оставить злоумышленикам возможности взломать ваш сайт через форму. html и php должны быть удалены"; echo strip_tags($text); echo strip_tags($text,"");//не удалять теги em ?> Первым аргуменом функции идет исходны текст, а вторым теги, которые не нжно удалять.PHP функция strtolower - переводит строку в нижний регистр
PHP функция strtoupper - переводит строку в верхний регистр
Если этот сайт оказался вам полезен, вы можете помочь в его развитии, поставив
Очень часто требуется обрабатывать введенные пользователем данные в текстовые поля. Для этого и существуют строковые функции в PHP . С их помощью мы можем обрабатывать текстовую информацию так, как нам нужно. В этой статье мы в начале разберем основные строковые функции, а потом напишем небольшой пример, для закрепления.
Вот список основных, и самых используемых строковых функций в php:
- srelen ("текст") — считает количество символов в строке. Вот небольшой пример:
- str_replace("что заменять", "на что заменять", "текст"); - функция нужна для замены подстроки в строке. Например, нам нужно заменить слово студия на «ля-ля-ля», в предложении: «Дизайн студия OX2 на рынке 20 лет» На экране увидим: «Дизайн ля-ля-ля OX2 на рынке 20 лет »
- trim ("текст", "символы")
— удаляет символы по краям. Например, нам нужно удалить по-краям пробелы и запятые в строке - « , Дизайн студия ox2.ru , ", ", »
. Для этого напишем код:
Первый параметр строка, второй — символы, которые нужно удалить по краям (если не указывать второй параметр, то обрезаться будут только пробелы).
На экране увидим «Дизайн студия ox2.ru» , без пробелов и запятых. Есть аналогичные функции ltrim — удаляет символы слева, и rtrim — справа.
Функция очень часто используется при создании интернет-магазинов, например при авторизации, чтобы пользователь при копировании пароля из блокнота случайно не вставил лишние пробелы или другие знаки. - substr("Строка", "Начальная позиция", "Конечная позиция"); - возвращает часть строки. Например, нам нужно в строке "Дизайн студия ox2.ru занимается созданием сайтов и интернет-магазинов" обрезать все лишнее, и оставить только , для этого напишем код: Вырезаем подстроку, начинаю с 14-ого символа, и заканчивая 34. На экране увидим «ox2.ru занимается созданием сайтов» . Если последний параметр (34) не указывать, то текст будет вырезан с 14-ой позиции до конца строки.
- strpos("Строка", "подстрока", позиция начального символа);
— возвращает позицию найденной подстроки в строке. Например, нам нужно узнать позицию слова "ox2"
в строке "Компания ox2.ru умеет создавать интернет магазины. В дизайн студии ox2.ru вы можете заказать сайт"
, пишем код:
На экране увидим 9, т.к. с 9-ого символа начинается первое вхождение слова ox2
. Если указать 3-ий параметр то поиск вхождения будет с этой позиции.
Так же есть функция strrpos , она ищет справа налево. Если в этом примере указать вместо strpos - strrpos, то на экране увидим 67, т.к. справа первое вхождение начинается с 67-ого символа.
Теперь напишем пример, для закрепления материала. В нашем скрипте будем обрабатывать данные из текстового поля «Адрес сайта:». Адрес сайта можно ввести так: «http://ox2.ru/», можно так «www.ox2.ru», можно так: «ox2.ru/», и т.д. Вариантом достаточно много. А для нашего интернет-магазина обязательное условие, это хранение всех данных о пользователе в едином формате («ox2.ru», без http, www, пробелов и слэшей по краям!).
Конечно это не самый удачный вариант, использовать такое количество строковых функций для обрезания лишнего, можно воспользоваться той же функцией str_replace :
Но цель урока показать использование этих функций в связке.
Работать со строковыми функциями приходиться не только если цены на создание сайтов высокие, в эконом сайтах они тоже почти всегда используются.
При разработке интернет магазинов очень часто требуется обрабатывать введенные пользователем данные в текстовые поля. Для этого и существуют строковые функции в PHP. С их помощью мы можем обрабатывать текстовую информацию так, как нам нужно. В этой статье мы в начале разберем основные строковые функции, а потом напишем небольшой пример, для закрепления.
OX2 2014-10-05 2014-10-05Основные в php строковые функции необходимо знать любому веб-программисту, так как строка в РНР — это самый главный тип данных. Длина строки практически ничем не ограничена (разве что размером памяти, занимаемым сценарием и физическим остатком ресурсов компьютера), поэтому в строку можно прочитать файл среднего размера и обработать его. Также к строке можно привести любой объект с помощью функции serialize().
Основные строковые функции PHP
Перечень полезных строковых функций PHP удобнее всего представить в виде таблицы. Функции приводятся без параметров — просто название функции и ее краткое описание. Далее мы рассмотрим некоторые из этих функций отдельно.
Функция | Описание |
---|---|
chop() | Удаляет пробельные символы в конце строки |
convert_cyr_string() | Используется для преобразования кодировок русского языка |
explode() | Выделяет подстроки (поля) из строки |
HtmlSpecialChars() | Заменяет специальные символы их HTML-эквивалентами, например < будет заменено эквивалентом < |
ltrim() | Похожа на trim(), но удаляет пробельные символы только в начале строки |
md5() | Кодирует указанную строку с помощью алгоритма MD5 |
nl2br() | Заменяет все символы новой строки (\п) тегом . Очень полезная функция в веб-программировании |
pack() | Запаковывает бинарные данные |
str_replace() | Используется для замены в строке |
strcasecmp() | To же, что и предыдущая функция, но производит сравнение без учета регистра символов |
strcmp() | Используется для сравнения строк |
strip_tags() | Удаляет все HTML-теги из строки |
strlen() | Определяет длину строки |
strpos() | Производит поиск подстроки в строке |
strtolower() | Преобразует все символы строки в нижний регистр |
strtoupper() | Преобразует все символы строки в верхний регистр |
substr() | Возвращает определенную подстроку |
trim() | Функция помогает избавиться от пробельных символов в начале и в конце строки |
unpack() | Распаковывает бинарные данные |
urldecode() | Раскодирует строку, которая была ранее закодирована с помощью urlencode() |
urlencode() | Кодирует строку для ее передачи в URL (символы, которые не могут быть представлены в URL, например символы русского языка, заменяются их кодами) |
wordwrap() | Используется для разбивки текста |
Определение длины строки в PHP
Функция strlen используется очень часто, поскольку значение длины строки требуется для многих ее преобразований. Использовать ее очень просто — передайте ей строку, а функция вернет количество символов, например:
$str = "Привет!"; echo strlen($str);
Поиск и замена в строке PHP
Для поиска в строке используется функция strpos(). Ей нужно передать три параметра — строку, в которой нужно произвести поиск, искомую строку и позицию начальной строки, с которой нужно начинать поиск. Если поиск нужно начать с начала строки, то позицию можно не указывать. Функция возвращает позицию, с которой начинается вхождение искомой строки в начальную строку. Если искомая строка не найдена, функция возвращает false.
Вот пример использования функции strops():
$position = strpos("Привет, мир", "мир"); if ($position === false) echo "Искомая подстрока не найдена"; else echo "Искомая строка начинается с позиции $position";
Что касается замены текста, то для ее осуществления используется функция str_replace(). Функция такого вида str_replace(строка1, строка2, строка3) – заменяет в строка3 все вхождения строка1 на строка2.
Echo str_replace("привет", "пока", "При встрече я говорю привет");
Сравнение строк в PHP
Функции strcmp() strcasecmp() используются для сравнения строк. Первая функция осуществляет сравнение строк с учетом регистра символов, а вторая — без учета. Функции возвращают следующие значения:
- 0, если лексикографически строки равны;
- -1, если первая строка лексикографически меньше, чем вторая (например строка «Арбуз» лексикографически меньше, чем строка «Борис»);
- 1, если первая строка лексикографически больше, чем вторая (например строка «Борис2» лексикографически больше, чем «Борис1»).
Что такое лексикографическое сравнение строк? Представьте, что у вас есть два слова, и вам нужно расположить их по алфавиту в порядке возрастания. Возьмем те же слова «Арбуз» и «Борис». Первое слово начинается на букву «А», которая в алфавите следует раньше буквы «Б», на которую начинается второе слово. Поэтому первая строка будет лексикографически меньше второй строки.
Работа с подстроками в PHP
Функция substr(строка, число1, число2) возвращает подстроку, начинающуюся с позиции число1 и длиной число2. Попробуйте выполнить код:
Echo substr("Hello, world!", 2, 4);
Первый параметр — это исходная строка. Второй параметр — начало подстроки, а третий параметр (он н еобязательный) — длина подстроки. Если третий параметр не задан, то подстрока возвращается до конца исходной строки.
$sub = substr("машина", 4); //возвращает "на" $sub = substr("машина", 2, 4); //возвращает "шина"
Очень мощной является функция explode(), позволяющая извлечь все подстроки, разделенные разделителем. Предположим, что у нас есть вот такая строка: «Строка1;Строка2;Строка3».
$str = "Строка1;Строка2;Строка3";
При вызове explode() мы должны указать два параметра: разделитель и исходная строка.
$A = explode(";", $str);
Функция возвращает список, содержащий наши строки.
Array ( => Строка1 => Строка2 => Строка3)
На этом пока все, но в PHP есть и другие полезные строковые функции, которые активно применяются веб-программистами на практике. О них я обязательно расскажу в одной из своих новых статей.
Функции работы со строками в PHP was last modified: Март 3rd, 2016 by Admin
4.1. Строковые функции PHP
В PHP существует очень много встроенных функций по работе со строками. Большая часть названий этих функций сведена в табл. 4.1.
Таблица 4.1
Имя функции |
Назначение |
Выводит значение переменной или выражения |
|
Print _ r |
Выводит массив |
Echo |
Выводит значения списка строковых переменных |
Получение символа с указанным кодом |
|
Получение подстроки |
|
Str_repeat |
Получение строки из повторяющихся значений |
Дополнение строки другой строкой до заданной длины |
|
Chunk_split |
Фрагментирование строки (вставляется последовательность разделителей) |
Strtok |
получение строки по частям |
Разделение строки в массив (на части по указанному разделителю) |
|
Или join |
Объединение элементов массива в строку с добавлением заданного разделителя |
Длина строки |
|
Симметричное шифрование |
|
Сравнение 2 строк c учетом регистра |
|
Strcasecmp |
Сравнение строк без учета регистра |
Синоним strstr |
Поиск первого вхождения символа в строку |
Определение первой позиции фрагмента в строке |
|
Определение последней позиции фрагмента в строке |
|
Удаление начальных пробелов |
|
Rtrim или chop |
Удаление конечных пробелов |
Удаление начальных и конечных пробелов |
|
Реверс строки |
|
Strtoupper |
Преобразование в верхний регистр |
Strtolower |
Преобразование в нижний регистр |
Замена указанных символов во всей строке |
|
Str_replace |
Замена фрагментов строки |
Substr_replace |
Замена части строки |
Addslashes |
Добавление обратных экранирующих слэшей перед спец. символами |
Stripslashes |
Удаление обратных слэшей |
Convert_cyr_string |
Конвертация строки из одной кодировки кириллицы в другую |
Parse_url |
Разделение строки url на ее компоненты |
str_pad() |
Выравнивает строку до определенной длины заданными символами и возвращает отформатированную строку |
strlen (string строка) |
Определение длины строки |
Strcspn(). |
Возвращает длину первого сегмента строки1, содержащего символы, отсутствующие в строке2 |
substr_count() |
Возвращает количество вхождений подстроки в заданную строку substr_count (string строка, string подстрока) |
substr_replace() |
Заменяет часть строки, которая начинается с заданной позиции substr_replace (string строка, string замена, int начало [, int длина ]) Параметры начало и длина задаются по определенным правилам:
|
Заменяет все символы новой строки (\n) эквивалентными конструкциями HTML |
Описание данных функций дано подробно в документации.
Возможности эффективной организации, поиска и распространения информации давно представляли интерес для специалистов в области компьютерных технологий. Поскольку информация в основном представляет собой текст, состоящий из алфавитно-цифровых символов, разработка средств поиска и обработки информации по шаблонам, описывающим текст, стала предметом серьезных теоретических исследований. Поиск по шаблону позволяет не только находить определенные фрагменты текста, но и заменять их другими фрагментами.
4.2. Механизмы поиска по шаблону
Данные механизмы решают четыре основные задачи:
- поиск строк, в точности совпадающих с заданным шаблоном;
- поиск фрагментов строк, совпадающих с заданным шаблоном;
- замену строк и подстрок по шаблону;
- поиск строк, с которыми заданный шаблон не совпадает.
Для решения задач лингвистического анализа текста был предложен механизм регулярных выражений. Регулярные выражения — это не изобретение программистов, а формальный язык математики, который в настоящий момент эффективно применяется в различных языках и средах программирования. В PHP присутствуют 2 группы функций по работе с регулярными выражениями, одна группы ориентирована на язык Perl, в котором эти механизмы впервые нашли эффективную поддержку, а вторая — это группа функций, ориентированная на стандарт открытых систем POSIX. Демократичность языка PHP предполагает, что разработчики могут использовать тот комплект функций, который им кажется более удобным.
Регулярные выражения лежат в основе всех современных технологий поиска по шаблону. Регулярное выражение представляет собой последовательность простых и служебных символов, описывающих искомый текст и принципы его преобразования.
4.3. Синтаксис регулярных выражений (POSIX)
Структура регулярных выражений POSIX чем-то напоминает структуру типичных математических выражений — различные элементы (операторы) объединяются друг с другом и образуют более сложные выражения. Однако именно смысл объединения элементов делает регулярные выражения таким мощным и выразительным средством. Возможности не ограничиваются поиском литерального текста (например, конкретного слова или числа); вы можете провести поиск строк с разной семантикой, но похожим синтаксисом — например, всех тегов HTML в файле.
Оператор | (вертикальная черта) проверяет совпадение одной из нескольких альтернатив.
Квадратные скобки () имеют особый смысл в контексте регулярных выражений — они означают «любой символ из перечисленных в скобках».
- [ 0-9] — совпадает с любой десятичной цифрой от 0 до 9;
- — совпадает с любым символом нижнего регистра от а до z;
- — совпадает с любым символом верхнего регистра от А до Z;
- — совпадает с любым символом нижнего или верхнего регистра от а до Z.
4.3.1. Квантификаторы
Существует особый класс служебных символов, обозначающих количество повторений отдельного символа или конструкции, заключенной в квадратные скобки. Эти служебные символы (+, * и {...}) называются квантификаторами. Принцип их действия проще всего пояснить на примерах:
- р+ означает один или несколько символов р, стоящих подряд;
- р* означает ноль и более символов р, стоящих подряд;
- р? означает ноль или один символ р;
- р{2} означает два символа р, стоящих подряд;
- р{2,3} означает от двух до трех символов р, стоящих подряд;
- р{2,} означает два и более символов р, стоящих подряд.
4.3.2. Прочие служебные символы
Служебные символы $ и ^ совпадают не с символами, а с определенными позициями в строке. Например, выражение р$ означает строку, которая завершается символом р, а выражение ^р — строку, начинающуюся с символа р.
Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указанные интервалы (a-z и A-Z).
Служебный символ. (точка) означает «любой символ». Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.
Объединение служебных символов приводит к появлению более сложных выражений.
Рассмотрим несколько примеров:
- ^.{2}$ — любая строка, содержащая ровно два символа;
- (.*) — произвольная последовательность символов, заключенная между <Ь> и Ь> (вероятно, тегами HTML для вывода жирного текста);
- p(hp)* — символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).
Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. Для этого служебные символы экранируются обратной косой чертой (\). Например, для поиска денежной суммы в долларах можно воспользоваться выражением \$+, т. е. «знак доллара, за которым следует одна или несколько десятичных цифр». Обратите внимание на обратную косую черту перед $. Возможными совпадениями для этого регулярного выражения являются $42, $560.
Стандартные интервальные выражения (символьные классы)
Для удобства программирования в стандарте POSIX были определены некоторые стандартные интервальные выражения, также называемые символьными классами (character classes). Символьный класс определяет один символ из заданного интервала — например, букву алфавита или цифру:
- [[:alpha:]] — алфавитный символ (aA-zZ);
- [[:digit:]]-цифра (0-9);
- [[:alnum:]] — алфавитный символ (aA-zZ) или цифра (0-9);
- [[:space:]] — пропуски (символы новой строки, табуляции и т. д.).
4.4. Функции РНР для работы с регулярными выражениями (POSIX-совместимые)
В настоящее время РНР поддерживает семь функций поиска с использованием регулярных выражений в стиле POSIX:
- еrеg();
- еrеg_rерlасе();
- eregi();
- eregi_replace();
- split();
- spliti();
- sql_regcase().
ereg()
Функция еrеg() ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис функции ereg():
Поиск производится с учетом регистра алфавитных символов. Пример использования ereg() для поиска в строках доменов.соm:
Обратите внимание: из-за присутствия служебного символа $ регулярное выражение совпадает только в том случае, если строка завершается символами.com. Например, оно совпадет в строке "www.apress.com", но не совпадет в строке "www.apress.com/catalog".
Необязательный параметр совпадения содержит массив совпадений для всех подвыражений, заключенных в регулярном выражении в круглые скобки.
ereg_replace()
Функция ereg_replace() ищет в заданной строке совпадение для шаблона и заменяет его новым фрагментом. Синтаксис функции ereg_replace():
Функция ereg_replace() работает по тому же принципу, что и ereg(), но ее возможности расширены от простого поиска до поиска с заменой. После выполнения замены функция возвращает модифицированную строку. Если совпадения отсутствуют, строка остается в прежнем состоянии. Функция ereg_replace(), как и еrеg(), учитывает регистр символов. Ниже приведен простой пример, демонстрирующий применение этой функции:
$copy_date = "Copyright 2005": $copy_date = ereg_replace("(+)". "2006", $copy_date); print $copy_date: // Выводится строка "Copyright 2006" |
У средств поиска с заменой в языке РНР имеется одна интересная возможность — возможность использования обратных ссылок на части основного выражения, заключенные в круглые скобки. Обратные ссылки похожи на элементы необязательного параметра-массива совпадения функции еrеg() за одним исключением: обратные ссылки записываются в виде \0, \1, \2 и т. д., где \0 соответствует всей строке, \1 — успешному совпадению первого подвыражения и т. д. Выражение может содержать до 9 обратных ссылок. В следующем примере все ссылки на URL в тексте заменяются работающими гиперссылками:
Поиск производится без учета регистра алфавитных символов. Функция eregi() особенно удобна при проверке правильности введенных строк (например, паролей). Использование функции eregi() продемонстрировано в следующем примере:
eregi_replace()
Функция eregi_replасе() работает точно так же, как ereg_replace(), за одним исключением: поиск производится без учета регистра символов. Синтаксис функции ereg_replace():
split()
Функция split() разбивает строку на элементы, границы которых определяются по заданному шаблону. Синтаксис функции split():
Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка слева направо. Если шаблон содержит алфавитные символы, функция spl it() работает с учетом регистра символов. Следующий пример демонстрирует использование функции split() для разбиения канонического IP-адреса на триплеты:
spliti ()
Функция spliti() работает точно так же, как ее прототип split(), за одним исключением: она не учитывает регистра символов. Синтаксис функции spliti():
Разумеется, регистр символов важен лишь в том случае, если шаблон содержит алфавитные символы. Для других символов выполнение spliti() полностью аналогично split().
sql_regcase()
Вспомогательная функция sql_regcase() заключает каждый символ входной строки в квадратные скобки и добавляет к нему парный символ. Синтаксис функции sql_regcase():
4.5. Синтаксис регулярных выражений в стиле Perl
Perl давно считается одним из самых лучших языков обработки текстов. Синтаксис Perl позволяет осуществлять поиск и замену даже для самых сложных шаблонов. Разработчики РHР сочли, что не стоит заново изобретать уже изобретенное, а лучше сделать знаменитый синтаксис регулярных выражений Perl доступным для пользователей РНР. Так появились функции для работы с регулярными выражениями в стиле Perl.
Диалект регулярных выражений Perl не так уж сильно отличается от диалекта POSIX. В сущности, синтаксис регулярных выражений Perl является отдаленным потомком реализации POSIX, вследствие чего синтаксис POSIX почти совместим с функциями регулярных выражений стиля Perl. Функции обработки регулярных выражений Perl-совместимые работают в 10-20 раз быстрее. Поэтому при обработке больших и сложных текстов рекомендуют использовать именно их.
Рассмотрим общие принципы регулярных выражений Perl на простом примере:
Этот шаблон совпадает с последовательностью програм , за которой могут следовать дополнительные символы м . Например, совпадения будут обнаружены в строках программ, программм . Рассмотрим пример использования квантификатора с ограничением:
Комбинация \d обозначает любую цифру. Конечно, в процессе поиска часто возникает задача идентификации алфавитно-цифровых символов, поэтому в Perl для них был определен метасимвол \w:
/<([\w]+)>/ |
Этот шаблон совпадает с конструкциями, заключенными в угловые скобки, — например, тегами HTML. Кстати, метасимвол \W имеет прямо противоположный смысл и используется для идентификации символов, не являющихся алфавитно-цифровыми.
Еще один полезный метасимвол, \b, совпадает с границами слов:
/ sql \b/ — это последовательность строк, начинающаяся с sql.
Поскольку метасимвол границы слова расположен справа от текста, этот шаблон совпадет в строках sql 1 и sqlnew или newsql, но не в строке. Противоположный метасимвол, \В, совпадает с чем угодно, кроме границы слова:
/ sql \B/ — символы sql должны находиться только не на границе слов.
Шаблон совпадает в таких строках, как PLsql _1 и PLSQL _ Oracle, но не совпадает в строке PLSQL.
Модификаторы
Модификаторы заметно упрощают работу с регулярными выражениями. Впрочем, модификаторов много, и в табл. 4.2 приведены лишь наиболее интересные из них. Модификаторы перечисляются сразу же после регулярного выражения — например, /string/i.
Таблица 4.2. Примеры модификаторов
4.6. Функции РНР для работы с регулярными выражениями (Perl-совместимые)
В РНР существует пять функций поиска по шаблону с использованием Perl-совместимых регулярных выражений:
- preg_match();
- preg_match_all();
- preg_replace();
- preg_split();
- preg_grep().
preg_match()
Функция preg_ m atch() ищет в заданной строке совпадение для шаблона. Если совпадение найдено, возвращается TRUE, в противном случае возвращается FALSE. Синтаксис функции:
При передаче необязательного параметра совпадения массив заполняется совпадениями различных подвыражений, входящих в основное регулярное выражение. В следующем примере функция preg_match() используется для проведения поиска без учета регистра:
preg_match_all()
Функция preg_match_all() находит все совпадения шаблона в заданной строке.
Синтаксис функции preg_match_all():
Порядок сохранения в массиве совпадения текста, совпавшего с подвыражениями, определяется необязательным параметром порядок. Этот параметр может принимать два значения:
- PREG_PATTERN_ORDER — используется по умолчанию, если параметр порядок не указан. Порядок, определяемый значением PREG_PATTERN_ORDER, на первый взгляд выглядит не совсем логично: первый элемент (с индексом 0) содержит массив совпадений для всего регулярного выражения, второй элемент (с индексом 1) содержит массив всех совпадений для первого подвыражения в круглых скобках и т. д.;
- PREG_SET_ORDER — порядок сортировки массива несколько отличается от принятого по умолчанию. Первый элемент (с индексом 0) содержит массив с текстом, совпавшим со всеми подвыражениями в круглых скобках для первого найденного совпадения. Второй элемент (с индексом 1) содержит аналогичный массив для второго найденного совпадения и т. д.
Следующий пример показывает, как при помощи функции preg_match_al() найти весь текст, заключенный между тегами HTML ...:
Функция preg_repl ace() работает точно так же, как и ereg_replасе(), за одним исключением того, что регулярные выражения могут использоваться в обоих параметрах: в шаблоне и в замене. Синтаксис функции preg_replace():
Необязательный параметр порог определяет максимальное количество замен в строке. Интересный факт: параметры шаблон и замена могут представлять собой массивы. Функция preg_replace() перебирает элементы обоих массивов и выполняет замену по мере их нахождения.
preg_split()
Функция preg_spl it() аналогична split() за одним исключением — параметр шаблон может содержать регулярное выражение. Синтаксис функции preg_split():
Необязательный параметр порог определяет максимальное количество элементов, на которые делится строка. В следующем примере функция preg_split() используется для выборки информации из переменной.
preg _ grep ()
Функция preg_grep() перебирает все элементы заданного массива и возвращает все элементы, в которых совпадает заданное регулярное выражение. Синтаксис функции preg_grep():
Пример использования функции preg_grep() для поиска в массиве слов, начинающихся на п, за которым следует один или несколько символов:
Презентации
Название презентации | Аннотация |