Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпорки Галиуллин (upd).doc
Скачиваний:
7
Добавлен:
26.04.2019
Размер:
595 Кб
Скачать
☆

14. Язык php. Обработка текстовой информации. Функции работы со строками. Регулярные выражения.

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

string htmlspecialchars(string str [, int quote_style [, string charset]]);

Первый аргумент – строка, в которой надо выполнить преобразование. В качестве второго необязательного аргумента принимается константа, задающая режим преобразования кавычек.

Производит преобразование спецсимволов в их HTML эквиваленты. Попросту говоря, эта функция гарантирует, что если Вы вдруг вздумаете написать в гостевой книге или на форуме какой-то код (php, javascript и т.д.) он отобразиться совершенно нормально, но выполняться не будет!

string substr(string string, int start[, int length])

Эта функция возвращает часть строки.

string strpos(string haystack, string needle[, int offset])

Эта функция обеспечивает действие, обратное функции substr. Т.е. она возвращает позицию в строке haystack, в которой найдена переданная ей подстрока needle.

string strstr(string haystack, string needle)

Функция strstr() возвращает участок строки, заданной в параметре haystack, начиная с первого фрагмента, указанного в параметре needle и до конца строки. В случае неудачи функция возвращает false.

Пример:

<?

$url = "http://www.softtime.ru";

$www = strstr($url,"w");

echo ($www);

?>

Результат: www.softtime.ru

strlen() - возвращает длину строки, которую принимает в качестве аргумента

chr() Эта функция принимает в качестве аргумента ASCII код символа и возвращает соответствующий этому коду фактический символ:

ord() Выполняет действие, обратное функции chr():

int strcmp(string str1, string str2)

Эта функция сравнения строк. Она сравнивает две строки и возвращает:

  • 0 - если строки полностью совпадают;

  • 1 - если, строка str1 лексикографически больше str2;

  • 1 – если, наоборот, строка str1 лексикографически меньше str2

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

С помощью регулярных выражений можно найти в строке подстроку, удовлетворяющую заданному шаблону и извлечь ее, проверить существует ли заданная строка и т.д.

Простейшее регулярное выражение можно записать так:

"abc"

Это выражение соответствует любой строке, которая содержит подстроку "abc".

Существует такое понятие, как выражение в квадратных скобках. Квадратные скобки ограничивают поиск теми символами, которые в них заключены:

"[abc]"

Этому регулярному выражению соответствует любая строка, содержащая abc либо вместе, либо каждый из них в отдельности. Выражение в квадратных скобках иногда еще называют бра-кет выражением.

Допустим, нам нужно создать регулярное выражение, соответствующее всем буквам русского алфавита. В этом случае мы можем, конечно, перечислить все эти буквы в регулярном выражении. Это допустимо, но утомительно и неэлегантно.

[14.1]

Более коротко такое регулярное выражение можно записать следующим образом:

"[а-Я]"

Это выражение соответствует всем буквам русского алфавита, поскольку любые два символа, разделяемые дефисом, задают соответствие диапазону символов, находящихся между ними. Заметьте, что регулярное выражение "[а-Я]" описывает символы как нижнего, так и верхнего регистров, поэтому более подробно это выражение можно записать так:

"[а-яА-Я]"

Точно таким же образом задаются регулярные выражения, соответствующие числам:

"[0-9]"

или

"[0123456789]"

Оба этих выражения эквивалентны и соответствует любой цифре.

При создании регулярных выражений часто удобно пользоваться групповым символом точки ".", который объединяет два одиночных символа, за исключением символа \n. К примеру:

.ок

Это выражение, в частности соответствует строкам "кок", "док", "ток".

В регулярном выражении может быть несколько ветвей, которые разделяются символом |, действующим как оператор OR (ИЛИ). Т. е., если в выражении используются ветви, то для соответствия регулярного выражения какой-либо строке, достаточно, чтобы только одна из ветвей соответствовала этой строке:

"abc|абв"

Этому регулярному выражению соответствует любая строка, содержащая подстроки "abc" или "абв". Ветвление удобно применять при проверке расширений и имен файлов, зон доменных имен и т. д.

Для исключения последовательности символов из поиска перед этой ней ставится символ "^":

"[^а-я]"

Это регулярное выражение отвечает любому символу, не содержащемуся в диапазоне а-я.

Регулярное выражение можно уточнить при помощи квалификаторов - так называются символы +, ?, *. Квалификаторы говорят о том, сколько раз последовательность символов может встретиться в строке и указываются непосредственно после той части выражения, к которой они применяются:

  • "a+" - хотя бы один а (строки "абв" и "абва" соответствуют этому выражению, а строка "укр" - нет);

  • "a?" - ноль или один а (строки "абв" и "укр" соответствуют этому выражению, а строка "абва" - нет);

  • "a*" - ноль или более а (строки "абв" и "абва" и "укр" соответствуют этому выражению).

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

  • "xy{2}" соответствует строке, в которой за x следует два y;

  • "xy{2,}" соответствует строке, в которой за x следует не менее двух y (может быть и больше);

  • "xy{2,6}" соответствует строке, в которой за x следует от двух до шести y;

Для указания количества вхождений не одного символа, а их последовательности, используются круглые скобки:

  • "x(yz){2,6}" соответствует строке, в которой за x следует от двух до шести последовательностей yz;

  • "x(yz)*" соответствует строке, в которой за x следует ноль и более последовательностей yz;

^ - начало строки

$ - конец

\ -перед спец символами