Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по сетям ЭВМ3.doc
Скачиваний:
31
Добавлен:
02.05.2014
Размер:
100 Кб
Скачать

Определение позиции подстроки

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

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

Целочисленное возвращаемое значение представляет первое вхождение строки needle. Необязательный параметр используется для указания позиции внутри строки haystack, с которой должен начинаться поиск.

Функция strrpos() будет возвращать позицию последнего вхождения строки needle. К тому же она работает только с одно-символьной строкой needle. В любом из этих случаев, если needle не является строкой, то будет возвращено значение false. Это может порождать проблемы, поскольку в слабо типизированном языке наподобие PHP значение false эквивалентно 0. Во избежание этой проблемы используют операцию ===:

$result = strpos($test, “H”);

if ($result === false)

echo “Not found”

else

echo “Fount at position 0”;

Замена подстрок

Строковая функция, которую чаще всего используют для замены – str_replace(). Ее прототип:

string str_replace(string needle, string new_needle, string haystack);

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

До сих пор действия по сопоставлению шаблонов выполнялось с использованием строковых функций. Эти действия ограничивались случаями точного соответствия строк или подстрок. В PHP сопоставление с помощью регулярных выражений больше подобно сопоставлению с помощью функции strstr(), чем сравнению на предмет равенства, поскольку выполняется сопоставление строки, находящейся где-то внутри другой строки. Например, строка “shop” соответствует регулярному выражению “shop”, “ho”, “h” и т.д. В дополнение к точному соответствию символов можно использовать специальные символы для указания метазначений. Например, с помощью специальных символов можно указать, что шаблон должен встречаться в начале или конце строки, что часть шаблона может повторяться или символы в шаблоне должны иметь конкретный тип. Рассмотрим все перечисленные случаи.

Наборы символов и классы

Использование наборов символов расширяет спектр возможностей регулярных выражений по сравнению с выражениями точного сопоставления. Фактически они являются одним из видов группового символа. Например, символ “.” можно использовать в качестве группового символа для любого другого одиночного символа, за исключением символа новой строки (регулярное выражение .at соответствует строкам “cat”, “mat” “#at” и т.д.).

Используя регулярные выражения можно точнее указывать тип символов, которые нужно сопоставлять, и можно указывать набор, к которому должен принадлежать символ. Например, если необходимо ограничить символы от a до z, можно указать [a-z].

Все, заключенное в специальные символы квадратных скобок, представляет класс символов, т.е. набор символов, к которому должен принадлежать сопоставляемый символ. Причем, заключенное в квадратные скобки выражение сопоставляется только с одиночным символом. Примеры: [aeiou] – означает любую гласную английского алфавита; [^a-z] – соответствует любому символу не относящемуся к диапазону a-z. В дополнение к наборам перечисления и диапазонам может использоваться ряд предопределенных классов символов.

Класс

Соответствие

[[:alnum:]]

Алфавитно – цифровые символы

[[:alpha:]]

Алфавитные символы

[[:lower:]]

Строчные буквы

[[:upper:]]

Прописные буквы

[[:digit:]]

Десятичные цифры

[[xdigit:]]

Шестнадцатеричные цифры

[[:punct:]]

Знаки пунктуации

[[:blanc:]]

Символы табуляции и пробелов

[[:space:]]

Любые символы свободного места

[[:cntrl:]]

Управляющие символы

[[:print:]]

Все печатные символы

[[:graph:]]

Все печатные символы, за исключением символов пробелов