- •Лекция 4 Манипулирование строками и регулярные выражения
- •Форматирование строк
- •Усечение строк
- •Форматирование строк для представления Использование html- форматирования
- •Форматирование строк для печати
- •Форматирование строк для хранения
- •Объединение и разделение строк с помощью строковых функций
- •Сравнение строк
- •Упорядочение строк
- •Проверка длины строк
- •Сопоставление и замена подстрок с помощью строковых функций
- •Поиск строк в строках
- •Определение позиции подстроки
- •Замена подстрок
- •Регулярные выражения
- •Наборы символов и классы
- •Повторение
- •Подвыражения
- •Ветвление
- •Поиск подстрок с помощью регулярных выражений
- •Замена подстрок с помощью регулярных выражений
- •Разделение строк с помощью регулярных выражений
Сравнение строк
До сих пор мы использовали только операцию == для сравнения двух строк на предмет их равенства. В PHP можно выполнять и более сложные операции сравнения. Их можно разделить на две категории: частичное совпадение и все прочие. Вначале рассмотрим прочие функции, а затем функции установления частичного совпадения, которые потребуются для дальнейшей разработки нашей формы.
Упорядочение строк
Данные функции полезны при сортировке данных. Прототип функции strcmp() имеет вид:
int strcmp(string str1, string str2);
Если две строки верны, то функция вернет 0. Эта функция чувствительна к регистру.
Функция strcasecmp(). Данная функция идентична предыдущей за исключение того, что она не чувствительна к регистру.
Функция strnatcmp() и ее нечувствительный к регистру аналог strnatcasecmp() сравнивают строки в соответствии с естественным упорядочением, которое более привычно для человека. Например, strcmp() расположила бы строку “2” после строки “12”, поскольку лексикографически она больше. Функция strnatcmp() расположила бы эти строки в обратном порядке.
Проверка длины строк
Длину строки можно проверить с помощью функции strlen(). Это можно задействовать при проверке правильности вводимых данных.
Сопоставление и замена подстрок с помощью строковых функций
Часто нужно проверить наличие конкретной подстроки в более длинной строке. Обычно это частичное сопоставление более полезно, нежели проверка строк на предмет равенства. В нашем примере требуется выполнить поиск на предмет наличия ключевых фраз в отзыве пользователя и отправить сообщение электронной почты в соответствующее подразделение. Можно было бы использовать функции explode() и strtok() для получения отдельных слов сообщения, а затем сравнить их, используя операцию == или функцию strcmp().
Однако это можно сделать с помощью единственного вызова одной из функций сопоставления строк или регулярных выражений.
Поиск строк в строках
Функция strstr() используется для поиска строки внутри строки, в том числе для поиска строки, состоящей только из одного символа. Ее прототип:
string strstr(string haystack, string needle);
В качестве параметра передается строка haystack, в которой нужно выполнить поиск, и строка needle, которую требуется найти. В случае обнаружения полного соответствия со строкой needle функция возвращает часть строки haystack, начинающуюся со строки needle, в противном случае она возвращает false. Если строка needle встречается более одного раза, возвращаемая строка будет начинаться с первого вхождения данной строки.
Например
$toaddress = "feedback@bobsdomain.com";
if (strstr($feedback, "shop"))
$toaddress = "retail@bobsdomain.com";
else if (strstr($feedback, "delivery"))
$toaddress = "fulfilment@bobsdomain.com";
else if (strstr($feedback, "bill"))
$toaddress = "accounts@bobsdomain.com";
Существует два варианта функции strstr(). Первый – функция stristr(), которая практически идентична предыдущей, но не чувствительна к регистру. Второй вариант – функция strrchr(), которая будет возвращать часть строки haystack, начиная с последнего вхождения строки needle.
Определение позиции подстроки
Функция 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”;