Модификаторы регулярных выражений.
ВВЕДЕНИЕ
Каждый пользователь сталкивался с задачей, когда в произвольном тексте нужно найти какие-то данные по какому-то закону, проверить данные, которые поступили от пользователя, подвергнуть найденные данные сложной модификации. Можно использовать средства, которые используют программисты всего мира.
Регулярные выражения в РНР.
Регулярное выражение (regular expression, regexp, регэксп) - механизм, позволяющий задать шаблон для строки и осуществить поиск данных, соответствующих этому шаблону в заданном тексте.
Главная задача системы - помимо четко заданных символов позволить указать пользователю поиск заданного количества заданных символов. Очень часто регулярные выражения используются для того, чтобы проверить, является ли данная строка строкой в необходимом формате.
Регулярное выражение представляет собой последовательность простых и служебных символов, описывающих искомый текст. Иногда регулярные выражения бывают простыми и понятными, но часто в них присутствуют служебные символы, обладающие особым смыслом в синтаксисе регулярных выражений — например <(?)>.*<\/.?>.
В РНР существуют два семейства функций, каждое из которых относится к определенному типу регулярных выражений: в стиле POSIX или в стиле Perl. Стиль POSIX регулярных выражений компилируется в РНР по умолчанию, а стиль Perl можно активизировать, выполнив компиляцию с библиотекой PCRE (Perl-compatible regular expression — Perl-совместимые регулярные выражения).
Синтаксис регулярных выражений (POSIX).
Структура регулярных выражений POSIX чем-то напоминает структуру типичных математических выражений — различные элементы (операторы) объединяются друг с другом и образуют более сложные выражения. Однако именно смысл объединения элементов делает регулярные выражения таким мощным и выразительным средством. Возможности не ограничиваются поиском литерального текста (например, конкретного слова или числа); вы можете провести поиск строк с разной семантикой, но похожим синтаксисом — например, всех тегов HTML в файле.
Простейшее регулярное выражение совпадает с одним литеральным символом — например, выражение g совпадает в таких строках, как g, haggle и bag. Выражение, полученное при объединении нескольких литеральных символов, совпадает по тем же правилам — например, последовательность gan совпадает в любой строке, содержащей эти символы (например, gang, organize или Reagan).
Оператор «|» (вертикальная черта) проверяет совпадение одной из нескольких альтернатив. Например, регулярное выражение php | zend проверяет строку на наличие php или zend.
Квадратные скобки.
Квадратные скобки ([ ]) имеют особый смысл в контексте регулярных выражений — они означают «любой символ из перечисленных в скобках». В отличие от регулярного выражения php, которое совпадает во всех строках, содержащих литеральный текст php, выражение [php] совпадает в любой строке, содержащей символы р или h. Квадратные скобки играют важную роль при работе с регулярными выражениями, поскольку в процессе поиска часто возникает задача поиска символов из заданного интервала.
Некоторые часто используемые интервалы: ¾ Интервал [0 - 9] — совпадает с любой десятичной цифрой от 0 до 9; ¾ Интервал [a - z] — совпадает с любым символом нижнего регистра от а до z; ¾ Интервал [A - Z] — совпадает с любым символом верхнего регистра от А до Z; ¾ Интервал [a – Z] — совпадает с любым символом нижнего или верхнего регистра от а до Z.
Конечно, перечисленные выше интервалы всего лишь демонстрируют общий принцип. Например, вы можете воспользоваться интервалом [0-3] для обозначения любой десятичной цифры от 0 до 3 или интервалом [b-v] для обозначения любого символа нижнего регистра от b до v. Короче говоря, интервалы определяются совершенно произвольно.
Квантификаторы.
Существует особый класс служебных символов, обозначающих количество повторений отдельного символа или конструкции, заключенной в квадратные скобки. Эти служебные символы (+, * и {...}) называются квантификаторами.
Принцип их действия проще всего пояснить на примерах: р+ означает один или несколько символов р, стоящих подряд; р* означает ноль и более символов р, стоящих подряд; р? означает ноль или один символ р; р{2} означает два символа р, стоящих подряд; р{2,3} означает от двух до трех символов р, стоящих подряд; р{2,} означает два и более символов р, стоящих подряд.
Прочие служебные символы.
Служебные символы $ и ^ совпадают не с символами, а с определенными позициями в строке. Например, выражение р$ означает строку, которая завершается символом р, а выражение ^р — строку, начинающуюся с символа р. Конструкция [^a-zA-Z] совпадает с любым символом, не входящим в указаные интервалы (a-z и A-Z).
Служебный символ «.» (точка) означает «любой символ». Например, выражение р.р совпадает с символом р, за которым следует произвольный символ, после чего опять следует символ р.
Объединение служебных символов приводит к появлению более сложных выражений. Рассмотрим несколько примеров:
^.{2}$ — любая строка, содержащая ровно два символа; <b>(.*)</b> — произвольная последовательность символов, заключенная между <Ь> и </Ь> (вероятно, тегами HTML для вывода жирного текста); p(hp)* — символ р, за которым следует ноль и более экземпляров последовательности hp (например, phphphp).
Иногда требуется найти служебные символы в строках вместо того, чтобы использовать их в описанном специальном контексте. Для этого служебные символы экранируются обратной косой чертой (\).
Модификаторы регулярных выражений.
Для регистронезависимого поиска по выражению используют - /i. Это означает, что в результат поиска попадут отрывки текста содержащие и заглавные и прописные символы. /U - модификатор указывает на то, что результатом поиска должен быть самый короткий отрывок, удовлетворяющий маске поиска. Модификатор /m позволяет искать отрезок текста только внутри одной строки. /s модификатор используют, если необходимо, что бы поиск был по всему тексту, не обращая внимания на перенос строки. Модификатор /x - игнорирует пробельные символы, в том числе символы табуляции и перевода строки.
Воспользуйтесь поиском по сайту: ©2015 - 2025 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|