- •Обработка динмачиской html страницы
- •Назначение и виды веб серверов
- •Способы встраивания php скрипта в html код
- •Переменные и константы в php. Область определения переменных
- •Область видимости переменных
- •Переменные переменные
- •Константы
- •5. Особенности синтаксиса php
- •6. Глобальные и статические переменные php Глобальные переменные в php
- •Статические переменные в php
- •7. Система типов языка php
- •8. Вывод данных в php
- •Арифметические операторы php
- •Логические операторы php
- •Строковые операторы php
- •Операторы присвоения в php
- •Операторы сравнения в php
- •Операторы инкремента и декремента в php
- •Операторы эквивалентности php
- •Операции с символьными переменными в php
- •Приоритеты выполнения операторов в php
- •Операторы исполнения внешних команд в php
- •Операторы для работы с массивами php
- •Операторы управления ошибками php
- •Операторы классов php
- •Поиск и замена подстрок
- •Регулярные выражения
- •Жадные и ленивые квантификаторы в регулярных выражениях
- •Использование html-форм для передачи данных на сервер
- •Для метода get
- •Для метода post
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Замечание
- •Типы ресурсов Предопределенные константы
- •Проверка существования файла
- •Функция file_exists
- •Функция is_writable
- •Функция is_readable
- •I. Открытие файла
- •II. Манипуляции с данными файла
- •III. Закрытие файла
- •Запись в файл
- •Чтение из файла
- •Взаимодействие php и MySql
- •Создание базы данных с помощью html-формы
- •Листинг 1. Код html-формы
- •Листинг 2. Код записывающей html-формы
Поиск и замена подстрок
Следующие три функции уже упоминались в разделе "Базовые операции со строками": int strpos ( string $s , string $sample , [ int $startPos=0 ] );
Возвращает позицию первого вхождения строки $sample в строку $s начиная с позиции $startPos. Если $startPos не задана, то ищет вхождение с начала строки $s. Если строка $sample не найдена, возвращает false.
string substr ( string $s , int $startPos [ , int $length ] );
Возвращает подстроку строки $s начиная с позиции $startPos. Эта позиция отсчитывается относительно начала строки, если $startPos неотрицательна, и от конца строки в противном случае. Необязательный параметр $length определяет количество символов в подстроке. Если он положителен, указанное количество отсчитывается относительно $startPos, если отрицателен - от конца строки $s. Если он не задан, то возвращается подстрока от позиции $startPos и до конца строки $s.
string str_replace ( string $srcSample , string $dstSample , string $s );
Возвращает строку, в которой все вхождения $srcSample строки $s заменены на $dstSample.
Дополнительные функции:
Int strrpos ( string $s , string $sample );
Возвращает позицию последнего вхождения первого символа строки $sample в строку $s. Все символы строки $sample , кроме первого, игнорируются.
string strstr ( string $s , string $sample );
Возвращает подстроку строки $s, начиная с позиции первого вхождения $sample и до конца строки.
Регулярные выражения
Ранее для поиска в строке подстроки мы использовали строковые функции, ограничиваясь при этом случаями точного соответствия строк и подстрок. Для работы со строками можно использовать также регулярные выражения, представляющие собой, по сути, мини-язык описаний для поиска в строках информации по заданному шаблону
С помощью регулярных выражений можно найти в строке подстроку, удовлетворяющую заданному шаблону и извлечь ее, проверить существует ли заданная строка и т.д.
Алгоритм поиска с использованием регулярных выражений был впервые разработан одним из создателей UNIX Кеном Томпсоном. Интересно, что изначально регулярные выражения появились не в теории вычислительных систем, а в нейрофизиологии. Основу теории регулярных выражений заложили нейрофизиологи У. Мак-Каллох и У. Питтс, работавшие над способами математического описания нервных процессов. Позднее математик С. Клини, основываясь на этих исследованиях, опубликовал работу "Представление событий в нейронных сетях", в которой и было введено понятие регулярных выражений. Кен Томпсон, основываясь на этих работах, адаптировал теорию регулярных выражений для алгоритмов поиска информации. Именно начиная с его работ, регулярные выражения стали использоваться в текстовых редакторах и вошли во многие языки программирования.
Базовый синтакси и создание регулярных выражений
Простейшее регулярное выражение можно записать так:
"abc"
Это выражение соответствует любой строке, которая содержит подстроку "abc".
Существует такое понятие, как выражение в квадратных скобках. Квадратные скобки ограничивают поиск теми символами, которые в них заключены:
"[abc]"
Этому регулярному выражению соответствует любая строка, содержащая abc либо вместе, либо каждый из них в отдельности. Выражение в квадратных скобках иногда еще называют бра-кет выражением.
Допустим, нам нужно создать регулярное выражение, соответствующее всем буквам русского алфавита. В этом случае мы можем, конечно, перечислить все эти буквы в регулярном выражении. Это допустимо, но утомительно и неэлегантно. Более коротко такое регулярное выражение можно записать следующим образом:
"[а-Я]"
Это выражение соответствует всем буквам русского алфавита, поскольку любые два символа, разделяемые дефисом, задают соответствие диапазону символов, находящихся между ними. Заметьте, что регулярное выражение "[а-Я]" описывает символы как нижнего, так и верхнего регистров, поэтому более подробно это выражение можно записать так:
"[а-яА-Я]"
Точно таким же образом задаются регулярные выражения, соответствующие числам:
"[0-9]"
или
"[0123456789]"
Метасимволы
Сила регулярных выражений исходит из возможности использовать условия и повторения в шаблоне. Они записываются при помощи метасимволов, которые специальным образом интерпретируются.
Существуют два различных набора метасимволов: те, которые используются внутри квадратных скобок, и те, которые используются вне квадратных скобок. Вне квадратных скобок используются следующие метасимволы:
\общий экранирующий символ, допускающий несколько вариантов применения
^декларирует начало данных (или строки, в многострочном режиме)
$декларирует конец данных (или строки, в многострочном режиме)
.соответствует любому символу, кроме перевода строки (по умолчанию)
[начало описания символьного класса
]конец описания символьного класса
|начало ветки условного выбора
(начало подмаски
)конец подмаски
?расширяет смысл метасимвола (, является также квантификатором, означающим отсутствие либо ровно 1 вхождение, также преобразует жадные квантификаторы в ленивые (смотрите повторение)
*квантификатор, означающий 0 или более вхождений
+квантификатор, означающий 1 или более вхождений
{начало количественного квантификатора
}конец количественного квантификатора
Часть шаблона, заключенная в квадратные скобки, называется "символьным классом". Внутри символьных классов используются следующие метасимволы:
\общий экранирующий символ
^означает отрицание класса, допустим только в начале класса
-означает символьный интервал
]завершает символьный класс
