Справочник от Автор24
Поделись лекцией за скидку на Автор24

Сортировка данных в PHP-скриптах

  • 👀 215 просмотров
  • 📌 150 загрузок
Выбери формат для чтения
Загружаем конспект в формате docx
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Сортировка данных в PHP-скриптах» docx
Лекция №11 2.8. Сортировка данных   Результирующий набор записей, полученный в результате выполнения запроса на выборку, по умолчанию отображается в соответствии с расположением этих записей в таблице. Часто при отображении данных для пользователя или при печати отчетов требуется упорядочивать результирующие записи, то есть проводить сортировку. Например, каталог  фильмов будет более наглядным, если названия будут находиться в алфавитном порядке. Для сортировки данных в PHP-скриптах используется запрос на выборку, содержащий предложение ORDER BY.   Пример 7.8. Сортировка записей: покажем механизм сортировки данных. Для этого отредактируем файл catalog.php, созданный в предыдущих разделах, реализовав в нем возможность сортировки записей по одному из столбцов .

"; } echo "
ID Название Жанр Год
$row[0] $row[1] $row[2] $row[3]
"; ?> Результат выполнения скрипта показан на рисунке 7.7. Рис. 7.7. Сортировка записей каталога Рассмотрим механизм работы этого скрипта: • заголовки таблицы представляются в виде ссылок, содержащих соответствующие параметр, по котором проводится сортировка (); • при нажатии на одну из ссылок в заголовках (isset($_GET['sort'])) параметр сортировки записывается в переменную $sort ($sort = $_GET['sort']); • в зависимости от значений переменной $sort (switch($sort)) формируется соответствующее предложение ORDER BY ($order_by = 'ORDER BY'); • при формировании запроса на выборку данных к нему добавляется полученное предложение ORDER BY ($query = "SELECT * FROM FILMS ". $order_by). 2.9. Постраничный вывод данных   Базы данных современных веб-приложений, как правило, хранят  огромное количество записей. Поэтому отображение всех данных на одной странице является нецелесообразным с точки зрения быстродействия системы и удобства для пользователей. Гораздо более рационально использовать постраничный вывод данных, когда на одной странице выводится лишь часть записей, а доступ к остальным записям осуществляется через навигационное меню. Постраничный вывод данных в PHP-скриптах реализуется с помощью запроса на выборку, содержащего конструкцию FIRST…SKIP. Для использования этой конструкции данные должны быть упорядочены, то есть запрос на выборку должен содержать также предложение ORDER BY.   Пример 7.9. Постраничный вывод записей: реализуем постраничный вывод записей в созданном ранее файле каталога catalog.php. Вывод  навигационного меню осуществим с помощью пользовательской функции.

$total) $n = $total; if ($n != 1) $pervpage = '<<<';  if ($n != $total) $nextpage = '>>>';   if($n - 2 > 0) $page2left = ' '. ($n - 2) .' | ';  if($n - 1 > 0) $page1left = ''. ($n - 1) .' | ';  if($n + 2 <= $total) $page2right = ' | '. ($n + 2) .'';  if($n + 1 <= $total) $page1right = ' | '. ($n + 1) .''; echo '
'.$pervpage.$page2left.$page1left.''.$n.''.$page1right.$page2right.$nextpage.'
';  } //Инициализация переменных $order_by = ""; $where = ""; $sort = ""; $host = "localhost:".dirname(__FILE__)."\base.fdb"; $user = "SYSDBA"; $pass = "masterkey"; $dbh = ibase_connect($host, $user, $pass); if (isset($_GET['sort'])) { $sort = $_GET['sort']; switch($sort) { case '1': $order_by = 'ORDER BY NAME'; break; case '2': $order_by = 'ORDER BY GENRE'; break; case '3': $order_by = 'ORDER BY RELEASE_YEAR'; break; } } if (isset($_POST['delete'])) { $cbs = $_POST['cbs']; $count = count($_POST['cbs']); for ($i = 0; $i < $count; $i++) { $del = $cbs[$i]; $query = "DELETE FROM FILMS WHERE ID='$del'"; ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg()); } } $num = 2; if (!empty($_GET['n'])) $n = strip_tags(trim($_GET['n'])); if(empty($n) or $n < 0) $n = 1; $start = $n * $num - $num; $total_items = ibase_fetch_row(ibase_query("SELECT COUNT(*) FROM FILMS")); getNavigationMenu($num,$total_items,$n,'sort='.$sort); $query = "SELECT FIRST $num SKIP $start * FROM FILMS " . $order_by; $result = ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg()); while ($row = ibase_fetch_row($result)) { echo ""; } echo "
ID Название Жанр Год
$row[0] $row[1] $row[2] $row[3]
"; ?> Результат выполнения скрипта показан на рисунке 7.8. Рис. 7.8. Постраничный вывод записей Рассмотрим механизм работы этого скрипта: • объявляется функция формирования навигационного меню getNavigationMenu, принимающая следующие аргументы: ◦ $num – количество записей на одной странице; ◦ $total_items – общее количество записей; ◦ $n – номер текущей страницы; ◦ $param – дополнительные параметры, передающиеся в GET-запросе; • в переменную $total записывается общее количество страниц ($total = intval(($total_items[0] - 1) / $num) + 1); • если номер страницы превышает общее число страниц (if($n > $total)), выводится последняя страница ($n = $total); • в зависимости от значений переменной $n генерируется  соответствующий HTML-код навигационного меню; • непосредственно в самом теле скрипта задается количество записей на одной странице ($num = 2), номер текущей страницы ($n = strip_tags(trim($_GET['n']))), номер первой отображаемой записи ($start = $n * $num - $num) и определяется общее количество записей ($total_items = ibase_fetch_row(ibase_query("SELECT COUNT(*) FROM FILMS"))); • вызывается созданная функция getNavigationMenu с определенными ранее аргументами (getNavigationMenu ($num,$total_items,$n, 'sort='.$sort)); • выполняется запрос на выборку $num записей, начиная с записи $start ("SELECT FIRST $num SKIP $start * FROM FILMS " . $order_by). 2.10. Поиск в базе данных   Любой каталог, помимо хранения и редактирования записей,  подразумевает возможность поиска необходимой пользователю информации. Поиск в PHP-скриптах, как правило, реализуется с помощью запросов на выборку, содержащих выражения CONTAINING или LIKE.   Пример 7.10. Поиск записей: реализуем возможность поиска записей в созданном ранее файле каталога catalog.php.

Название:

Жанр:



$total) $n = $total; if ($n != 1) $pervpage = '<<<';  if ($n != $total) $nextpage = '>>>';   if($n - 2 > 0) $page2left = ' '. ($n - 2) .' | ';  if($n - 1 > 0) $page1left = ''. ($n - 1) .' | ';  if($n + 2 <= $total) $page2right = ' | '. ($n + 2) .'';  if($n + 1 <= $total) $page1right = ' | '. ($n + 1) .''; echo '
'.$pervpage.$page2left.$page1left.''.$n.''.$page1right.$page2right.$nextpage.'
';  } //Инициализация переменных $order_by = ""; $where = ""; $sort = ""; $keyword = ""; $genre = ""; $host = "localhost:".dirname(__FILE__)."\base.fdb"; $user = "SYSDBA"; $pass = "masterkey"; $dbh = ibase_connect($host, $user, $pass); if (isset($_GET['sort'])) { $sort = $_GET['sort']; switch($sort) { case '1': $order_by = 'ORDER BY NAME'; break; case '2': $order_by = 'ORDER BY GENRE'; break; case '3': $order_by = 'ORDER BY RELEASE_YEAR'; break;          } } if (isset($_POST['delete'])) { $cbs = $_POST['cbs']; $count = count($_POST['cbs']); for ($i = 0; $i < $count; $i++) { $del = $cbs[$i]; $query = "DELETE FROM FILMS WHERE ID='$del'"; ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg()); } } if (!empty($_GET['keyword']) or !empty($_GET['genre'])) { $where = "WHERE "; if (!empty($_GET['keyword'])) { $keyword = strip_tags(trim($_GET['keyword'])); if (!preg_match("/.{2,}/", $keyword)) { echo '

Строка для поиска должна состоять из 2 или более символов

'; exit; } $conditions[] = "UPPER (NAME) LIKE UPPER ('%".$keyword."%')"; } if (!empty($_GET['genre'])) { $genre = strip_tags(trim($_GET['genre'])); $conditions[] = "UPPER (GENRE) LIKE UPPER ('%".$genre."%')"; } } else $conditions[]=''; $num = 2; if (!empty($_GET['n'])) $n = strip_tags(trim($_GET['n'])); if(empty($n) or $n < 0) $n = 1; $start = $n * $num - $num; $total_items = ibase_fetch_row(ibase_query("SELECT COUNT(*) FROM FILMS ". $where . implode(' AND ', $conditions))); if ($total_items[0] == 0) { echo '

Ничего не найдено

'; exit; } getNavigationMenu($num,$total_items,$n,'sort='.$sort.'&keyword='.$keyword.'&genre='.$genre); $query = "SELECT FIRST $num SKIP $start * FROM FILMS ". $where . implode(' AND ', $conditions). " ". $order_by; $result = ibase_query($dbh, $query) or die ("Сбой при доступе к БД: " . ibase_errmsg()); echo ""; while ($row = ibase_fetch_row($result)) { echo ""; } echo "
ID Название Жанр Год
$row[0] $row[1] $row[2] $row[3]
"; ?> Результат выполнения скрипта показан на рисунке 7.9. Рис. 7.9. Поиск записей Рассмотрим механизм работы этого скрипта: • формируется форма поиска. Данные полученные с формы пересылаются в GET-запросе и обрабатываются в том же файле catalog.php (
). В качестве параметров для поиска выбраны названия кинофильмов и их жанр; • если в форму поиска введено какое-либо значение (if (!empty($_GET['keyword']) or !empty($_GET['genre'])), создается переменная $where, содержащее предложение WHERE, которое в дальнейшем будет добавлено к запросу на выборку данных ($where = "WHERE "); • если поиск осуществляется по названию фильма (if (!empty($_GET['keyword']))), то в переменную $keyword записывается введенное название, а в массив $conditions – SQL-предложение для его поиска ($conditions[] = "UPPER (NAME) LIKE UPPER ('%".$keyword."%')"). Так как поиск с помощью выражения LIKE является регистрозависимым, необходимо переводить все поисковые строки к одному регистру, как правило, верхнему. Аналогичным образом осуществляется формирование поискового запроса при задании жанра фильма; • если же форма поиска не заполнена, массив поисковых предложений обнуляется (else $conditions[]=''); • при формировании навигационного меня для постраничного вывода записей в виде GET-параметров запоминаются поисковые строки (&keyword='.$keyword.'&genre='.$genre); • к запросу на выборку добавляются сформированные ранее поисковые предложения ($where . implode(' AND ', $conditions)). Функция implode переводит массив $conditions в строку, а в качестве разделителей использует строку AND. Это позволяет осуществлять поиск одновременно по названию и по жанру; • если записей, удовлетворяющих поисковому запросу, не найдено (if ($total_items[0] == 0)), выводится соответствующее сообщение и скрипт прекращает работу. Иначе выводятся найденные записи и общее число записей. Таким образом, если форма поиска не заполнена, скрипт работает как обычный каталог, выводя все записи. Если же в форме заданы поисковые значения, скрипт реализует поиск по каталогу и выводит только соответствующие этим значениям записи. Однако, данный скрипт реализует простейший поиск по двум критериям без каких-либо ограничений на поисковые значения. Для реализации поиска, учитывающего, например, длину поисковой строки, ее содержание или регистр, необходимо использовать систему регулярных выражений, речь о которых пойдет далее. Регулярные выражения в PHP   Регулярные выражения – это мощный инструмент сравнения и обработки текста. Они не так быстры, как обычные операции сравнения строк, но отличаются чрезвычайной гибкостью, позволяя создавать шаблоны сравнения для практически любой комбинации символов при помощи довольно простого, хотя и до некоторой степени трудного для понимания синтаксиса. Регулярные выражения могут применяться для сравнения введенного текста с заданным шаблоном; поиска внутри текста большого объема фрагмента, соотвествующего шаблону; замещения текста другим текстом или переупорядочивание фрагмента совпавшего текста; разбития блоков текста на списки более мелких фрагментов и многого другого. При грамотном использовании регулярные выражения способны упростить задачи программирования и обработки текстов, а также обеспечить решение многих задач, которые вообще не могли бы быть решены без использования регулярных выражений. Не существует официального стандарта, который точно определял бы, какой текстовый шаблон является регулярным выражением, а какой – нет. Каждый, кто проектирует свой язык программирования, и каждый разработчик приложений, обрабатывающих тексты, имеет свое представление о том, какими должны быть регулярные выражения. Поэтому вместо официального стандарта существует множество различных диалектов регулярных выражений. Однако, не смотря на огромное разнообразие диалектов регулярных выражений, почти все из них ведут свою историю от языка программирования Perl и называются регулярными выражениями в стиле языка Perl. Одним из таких диалектов (а точнее группы диалектов) является библиотека PCRE (Perl Compatible Regular Expressions – Perl-совместимые регулярные выражения). Она полностью поддерживает стиль языка Perl, но имеет некие отличия в работе с кодировкой Юникод и не допускает внедрение программного кода на языке Perl в регулярные выражения. Благодаря свободной лицензии и надежности библиотека PCRE применяется во многих языках программирования, в том числе и в PHP. В данной лекции рассматривается базовый синтаксис регулярных выражений библиотеки PCRE, а также описываются основные PHP-функции по работе с регулярными выражениями. 1. Синтаксис регулярных выражений   Основы регулярных выражений довольно просты для понимания. Последовательность символов заключается в шаблон, а затем строки текста сравниваются с шаблоном и определяются совпадения. Таким образом, базовым элементом в регулярных выражениях является понятие шаблона, синтаксис построения которого будет рассмотрен в этой лекции. Шаблоны регулярных выражений можно сравнить с файловыми глобами, использующимися в операционных системах UNIX или Windows. Так, например, для выборки всех текстовых файлов можно использовать глоб вида *.txt. Здесь, наряду со строкой расширения txt используются символы, имеющие особый смысл. Звездочка (*) означает любую последовательность символов, а вопросительный знак (?) – один произвольный символ. Таким образом, данный глоб будет означать выборку всех файлов, имена которых начинаются с любой последовательности символов и заканчиваются символами .txt. Аналогичным образом работают и шаблоны регулярных выражений. Каждый шаблон состоит из двух типов символов. Специальные символы (вроде * в файловых глобах) называются метасимволами. Все остальные, то есть обычный текст, называются литералами. Шаблоны отличаются от файловых глобов в первую очередь большими выразительными возможностями своих метасимволов. В файловых глобах используется малое количество метасимволов, предназначенных для ограниченных целей, синтаксис же регулярных выражений содержит богатый набор метасимволов для различных областей применения. Регулярные выражения можно рассматривать как самостоятельный язык, в котором литералы выполняют функцию слов, а метасимволы – функции грамматических элементов. Слова по определенным правилам объединяются с грамматическими элементами и создают конструкции, выражающие некоторую мысль, иногда на первый взгляд не имеющую смысла, например /^(http|https|ftp)://([A-Z0-9][A-Z0-9_-]*(?:.[A-Z0-9][A-Z0-9_-]*)+):?(d+)?/?/i Но зная эти правила, прочтение и построение регулярных выражений не составит труда. 1.1. Основные метасимволы   Любое регулярное выражение должно содержать, по крайней мере, одну группу метасимволов – разделители, использующиеся для задания  начала и конца регулярного выражения. В качестве разделителей используются символы /, ~ или #. Таким образом, простейшее регулярное выражение может выглядеть, например, как /word/ и будет соответствовать строке, содержащей слово word. Также к основным метасимволам относятся следующие символы: • точка (.) – обозначает один любой символ. Выражение /w.rd/ будет соответствовать словам word, ward и прочим; • циркумфлекс (^) – задает начало проверяемой строки. Так, выражение /^word/ соответствует любой строке, начинающейся со слова word; • доллар ($) – задает конец проверяемой строки. Выражение /^word$/ будет соответствовать строке, содержащей лишь слово word; • перечеркивание (|) – конструкция выбора. Обозначает одно из разделяемых слов и может располагаться только в круглых скобках. Например,  выражение /(word$|^symbol)/ соответствует любой строке, заканчивающейся словом word или начинающейся со слова symbol; • круглые скобки () – служат для логического объединения частей регулярного выражения. Еще одним важным метасимволом является символ \. Если в строке встречается этот символ, то интерпретатор рассматривает символ, непосредственно следующий за ним двояко: • если следующий символ является метасимволом, то он теряет свое специальное значение и рассматривается как символьный литерал. Это  необходимо для того, чтобы экранировать метасимволы и вставлять их  в строку как литералы. Например, выражение /./ определяет любой единичный символ, а /\./ соответствует просто точке. Также можно экранировать и сам этот метасимвол: /\\/; • если следующий символ является символьным литералом, то он может стать метасимволом. Существует несколько символов, которые образуют метасимволы в паре с обратным слэшем: ◦ \a – сигнал; ◦ \b – забой; ◦ \n – перевод строки; ◦ \r – возврат каретки; ◦ \t – обычная табуляция; ◦ \v – вертикальная табуляция. Как правило, подобные пары используются для того, чтобы показать, что на этом месте в строке должен находиться символ, с кодом, который не имеет соответствующего ему изображения. 1.2. Символьные классы   Механизм регулярных выражений позволяет перечислять символы, которые могут находиться в данной позиции текста, создавая так называемые символьные классы. Для этого список допустимых символов записывается в квадратных скобках. Количество символов в классе может быть любым, и  расположены они могут в любом порядке. Например, выражение // будет соответствать одному из HTML-тегов заголовка:

,

,

или

. Помимо литералов символьные классы могут содержать 3 типа метасимволов: • дефис (-) – используется для задания набора символов из одного промежутка. Так, для определения строки, содержащей цифру в шестнадцатиричной системе счисления, можно использовать выражение /[0-9A-Fa-f]/; • циркумфлекс (^) – используется как символ отрицания, если расположен первым в классе, иначе рассматривается как простой литерал. Например, выражение /[^0-9]/ задает символьный класс, содержащий любые символы, кроме цифр; • обратный слэш (\)– задает сокращенное обозначение классов: ◦ \d – цифра. Эквивалентно [0-9]; ◦ \D – не цифра. Эквивалентно [^\d] или [^0-9]; ◦ \w – символ, входящий в слово. Обычно это все буквы и цифры, а также символ подчеркивания (_). Эквивалентно [a-zA-Z0-9_]; ◦ \W – символ, не входящий в слово. Аналогично [^\w]; ◦ \s – пустой символ (пробел, возврат каретки, символ табуляции). Эквивалентно [\n\r\t\v]; ◦ \S – не пустой символ. Аналогично [^\s]; Таким образом, интерпретация некоторых метаимволов зависит от того, принадлежат ли они символьному классу или нет. Например, метасимвол ^ вне символьного класса обозначает начало проверяемой строки, внутри же класса используется как отрицание. 1.3. Квантификаторы   Символ точки, а также квадратные скобки всегда обозначают лишь один символ. Для задания количества повторений символа используются квантификаторы. Каждый из описанных ниже квантификаторов определяет количественную характеристику символа, который находится непосредственно перед ним. Например, выражение /^[\d]{5,}/ будет соответствовать строке, начинающейся, по крайней мере, с 5 цифр. Основные квантификаторы: • знак вопроса (?) – символ входит в строку ноль или один раз; • звездочка (*) – символ входит в строку любое число раз, в том числе и ноль; • плюс (+) – символ входит в строку один или более раз; • {n} – символ входит в строку n раз; • {n,} – символ входит в строку n и более раз; • {n, m} – символ входит в строку от n до m раз. Обычно регулярные выражения стремятся найти как можно более длинное соответствие, в связи с чем, указанные выше квантификаторы стремятся вернуть всю строку – такое поведение называется «жадным». Рассмотрим, например, выражение /.*word/. Здесь квантификатор * будет выполняться дословно, и интерпретатор сначала покроет этим выражением всю строку, сохраняя на каждом символе точку возврата. Увидев, что выражение не закончено, интерпретатор возвратится обратно, пока не найдет совпадение. В результате скорость выполнения выражения заметно упадет. Наличие же дополнительных квантификаторов * на порядок снизит производительность. Для решения такого рода проблем используются «нежадные»  («ленивые») квантификаторы *?, +?, ?? и {n,m}?. Такие квантификаторы покрывают минимально возможную подстроку, что позволяет избежать проблем с излишним покрытием. Например, выражение /.+.+/ покроет всю подстроку от первой встретившейся в тексте скобки до последней. В тоже время выражение /.+?.+?/ остановится на первой закрывающей скобке. Еще одной разновидностью квантификаторов являются так называемые «сверхжадные» («ревнивые») квантификаторы *+, ++, ?+ и {n,m}+. Их особенностью является то, что они ведут себя как жадные, то есть покрывают как можно большую подстроку, а также не дают на проверку покрытую подстроку другим частям регулярного выражения. Например, применение выражения /".*"/ к строке a"b"c"d" приведет к нахождению подстроки "b"c"d", так как жадный квантификатор * покроет как можно большую подстроку, а затем отдаст обратно. При использование же выражения /”.*+”/ соответствия вообще не будет найдено, поскольку сверхжадный квантификатор *+ после того, как доберется до последней кавычки (признак «жадности») не будет откатываться назад (признак «сверхжадности»). На практике «ревнивые» квантификаторы используются редко, в основном для быстрого отсева заведомо неподходящих строк. 1.4. Модификаторы   Механизм регулярных выражений поддерживает несколько режимов интерпретации и применения выражений. Режимы могут применяться ко всему регулярному выражению или к отдельным подвыражениям. Глобальное применение реализуется при помощи различных модификаторов, располагаемых после закрывающего знака разделителя, например /i. Частичное применение обеспечивается конструкциями вида ?i (включение модификатора) и ?-i (отключение модификатора). К основным модификаторам относятся: • i – режим поиска без учета регистра. Например, выражение /num\d/i будет соответствовать строкам Num1, nUm5 и прочим; • m – режим привязки к границам строк. В этом режиме соответствие ищется в интервале между двумя переводами строк, а не во всем тексте; • s – режим совпадения точки со всеми символами. В данном случае соответствие ищется во всем тексте, а не в интервале между двумя переводами строк; • x – режим свободного форматирования. В данном режиме все  неэкранируемые пробелы и символы табуляции игнорируются, если они находятся вне квадратных скобок; • U – «ленивый» режим. Модификатор делает все квантификаторы «нежадными» по умолчанию, то есть будет осуществлятся поиск минимальной по длине подстроки. 1.5. Подшаблоны   Подшаблоном называется часть регулярного выражения, заключенная в круглые скобки. Сами по себе подшаблоны не влияют на функционирование регулярных выражений и могут служить только для удобства группировки. Они также могут быть вложенными. Подшаблоны нумеруются по порядку открывающей круглой скобки, и для доступа к фрагменту текста, совпавшему с подшаблоном, используются так называемые обратные ссылки. Они состоят из символа слэша (/) и числа от 1 до 99, указывающего к какому подшаблону относится ссылка. Следует отметить, что вместо ссылки подставляется фрагмент текста, а не подшаблон. Так, выражение /слов(о|а) и числ\1/ будет сопоставляться строкам «слово и число» и «слова и числа», но не строке «слова и число».  Если сохранять совпавший с подшаблоном текст не требуется, используют группирующие круглые скобки вида (?. Это исключает подшаблон из списка ссылок. Например, выражение /a((b+)(?:c*))(d?)/ будет иметь три ссылки. Ссылка \1 указывает на подшаблон ((b+)(c*)), ссылка \2 – на (b+), а ссылка \3 – на (d?). В подшаблонах также можно использовать последовательности, блокирующие дальнейший перебор повторений после того, как уже было найдено первое соответствие. Такие подшаблоны записываются в виде (?>). Использование таких подшаблонов накладывает на выражение ограничение, указывающее, что после того, как найдено совпадение подшаблона с фрагментом текста, все дальнейшие проверки проводятся относительно этого места совпадения. Например, необходимо определить, оканчивается ли текст символами «Дд». При использовании выражения /Дд$/ проверка будет проходить от начала текста, что отрицательно скажется на производительности – сначала будет разыскиватся символ, а затем будет определяться, стоит ли он в конце текста. Если же использовать выражение /^(?>.*)(Дд)$/, то первый подшаблон сразу же покроет весь текст целиком, а затем будет проверено окончание. Еще одной разновидностью подшаблонов являются условные подшаблоны, позволяющие выбирать подходящий подшаблон в зависимости от результатов поиска. Они записываются как (?(условие)подшаблон1) или как (?(условие)подшаблон1|подшаблон2). При выполнении условия используется первый подшаблон, в противном случае используется второй подшаблон. Если условием является числовая последовательность, то условие считается верным, если подшаблон с указанным номером был найден и существует непустая ссылка с таким номером. Например, следующее выражение разделяет текст с невложенными скобками: / ( ( \?      # необязательная открывающая скобка ( [^()]+ )      # все, кроме скобок (?(2) \) )     # если была открывающая скобка, ищется закрывающая )+               # операция выполняется один или более раз /x Однако, не стоит забывать, что если найдено совпадение с каким-либо  подшаблоном, но в целом шаблон не соответствует фрагменту текста, то поиск завершается неудачей. 1.6. Позиционные проверки   Для определения расположения проверяемой подстроки в тексте механизм регулярных выражений предоставляет, помимо обычных круглых скобок и метасимволов ^ и $, четыре типа позиционных проверок: • (?=) – подстрока располагается справа от совпадения; • (?!) – подстрока не располагается справа от совпадения; • (?<=) – подстрока располагается слева от совпадения; • (? • preg_match_all – реализует полный регулярный поиск. Синтаксис: preg_match_all (регулярное_выражение, текст [, совпадения]) Функция ищет в тексте, указанном аргументом текст, все возможные соответствия регулярному выражению, записанному в параметре регулярное_выражение. Поиск последующих совпадений производится от места последнего совпадения. Функция возвращает число совпадений с полным шаблоном или значение false, если совпадений не было. Рассмотрим выражение, реализующее поиск всех значениий заданного тега: wordsymbol"; $tag = "td"; if (preg_match_all('/<'.$tag.'[^>]*>(.*?)<\/'.$tag.'>/', $text, $match)) print_r($match[0]);                                   else echo "Тег не найден"; ?> • preg_replace – реализует регулярный поиск с заменой. Синтаксис: preg_replace (регулярное_выражение, замена, текст [, лимит]) Функция ищет в тексте текст все фрагменты, соответствующие выражению регулярное_выражение и заменяет их на замена. При этом возвращается измененный текст. Если совпадений не находится, возвращается исходный текст текст. Аргумент лимит указывает на количество заменяемых фрагментов. Если он не указан, то заменяются все найденные фрагменты. Рассмотрим выражение, удаляющее все ссылки из текста: ]*)?~i",'',$text); echo $text; ?> • preg_split – разделяет строку с помощью регулярного выражения. Синтаксис: preg_split (регулярное_выражение, текст [, лимит]) Функция возвращает массив, содержащий части текста текст, находящиеся между фрагментами, соответствующими шаблону регулярное_выражение. Аргумент лимит задает максимальное число фрагментов в возвращаемом массиве. Если число фрагментов больше лимита, то остаток исходной строки, не разделенной на фрагменты, возвращается в последнем элементе. Рассмотрим выражение, разделяющее текст на части пробельными символами: • preg_grep – фильтрует элементы массива в соответствии с шаблоном. Синтаксис: preg_grep (регулярное_выражение, массив) Функция возвращает массив массив, в котором оставлены только элементы, соответствующие указанному в аргументе регулярное_выражение выражению. Рассмотрим выражение, которое фильтрует массив из предыдущего примера, оставляя в нем лишь элементы, имеющие, по крайней мере, одну букву: • preg_quote – экранирует строку. Синтаксис: preg_quote (строка) Функция возвращает строку, в которую вставлены слэши перед каждым символом, который в регулярных выражениях является метасимволом.

«Сортировка данных в PHP-скриптах» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ
Получи помощь с рефератом от ИИ-шки
ИИ ответит за 2 минуты

Тебе могут подойти лекции

Автор(ы) Варыгина М. П.
Смотреть все 588 лекций
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot