Главная · Карта сайта · Поиск · Статьи · Компьютерные курсы · Обучающие программы · Открытые проекты · Веб-программирование · Создание интернет-сайта · Полезные ссылки · Глоссарий · Контакты · Декабрь 09 2016 20:21:10
Последнее опубликованное

Что такое Model-View-Controller
Pattern Model-View-Controller

Как создать свой веб-сайт
Как создать свой сайт в интернете

Разное
Статистика

Синтаксис регулярных выражений


Регулярные выражения. Правила правописания...

Для начала совсем кратко опишу синтаксис регулярных выражений. Даже не весь синтаксис, поскольку я не уверен, что знаю все тонкости этого инструмента, а самые основные моменты.

Итак, строка, представляющая собой регулярное выражение, состоит из следующих категорий символов: литералы, простые метасимволы и составные метасимволы. Далее более подробно про каждую из них.

  • Литералы – символы, которые представляют сами себя и не имеют никакой специальной интерпретации. Литералы в регулярном выражении, определяющем поиск ключевых слов в тексте главной страницы этого сайты, выделены подчеркиванием:
    ([Пп]рограмм\w+)|([Оо]бучени\w+)|([Кк]урс\w*)

  • Специальные символы или метасимволы. К этой категории относится ряд символов, которые либо сами по себе, либо в купе с окружением являют собой специальные инструкции для обработчика регулярных выражений. К ним относятся символы: [ ] \ ^ $ . | ? * + ( ) { }. А вот они в исходном регулярном выражении:
    ([Пп]рограмм\w+)|([Оо]бучени\w+)|([Кк]урс\w*)

  • Самым важным из специальных символов является обратный слэш “\”, поскольку он из обычных литералов образует метасимволы. Я их называю неявные или составные метасимволы. Таким образом, добавление перед обычным литералом обратной косой черты в корне изменяет его интерпретацию обработчиком.Вот они, составные метасимволы все в том же регулярном выражении:
    ([Пп]рограмм\w+)|([Оо]бучени\w+)|([Кк]урс\w*)

Важно: Добавление “\” перед специальным символом приводит ровно к противоположному результату: специальный символ становится обычным литералом! Эту метаморфозу еще называют экранированием.

Перед тем как перейти к живым примерам, буквально пару слов о метасимволах. Самое простое регулярное выражение может состоять из одних литералов, но использование таких конструкций – это как стрельба из пушки по воробьям. Метасимволы позволяют чрезвычайно гибко настраивать алгоритм поиска нужных вам фрагментов, и их можно классифицировать по способу интерпретации:

  • Множества. Например: \d – любая цифра от 0 до 9; \w – любой обычный символ, такой как буква, цифра и даже символ подчеркивания. Похожие метасимволы, но с заглавными буквами означают ровно противоположное, например: \D – все, кроме цифры. Символ \s – пробел, а \S, соответственно, все кроме пробела. Символ "." означает вообще любой символ (иногда кроме символа перевода строки).

  • Наборы. С помощью квадратных скобок [] есть возможность предложить интерпретатору один символ из набора или диапазона. Примеры типа [Пп], [Оо], [Кк] с заглавной и строчной буквой были приведены в самом начале, а следующий пример определяет наборы посредством диапазонов: [А-я], [0..9], [A-Za-z] и т.д. С наборами можно также использовать логические операции: [^А-Яа-я] – любой символ, кроме русских символов. Конструкция вида [^\d] эквивалентна \D.

  • Квантификаторы. Метасимволы, накладывающие ограничения на количество вхождений символа или группы символов в строку. Например, “*” соответствует количеству вхождений от 0 и более, а “+” - от 1 и более. Символ “?” интерпретируется, как "необязательность присутствия": т.е. 0 или 1. Также, с использованием фигурных скобок {} можно наложить более конкретные ограничения на количество вхождений, например: {5} – ровно 5 раз, {2,4} – от двух до четырех раз. Есть также вариант ограничить с одной стороны: {1,} – не менее одного раза, что соответствует “+”, а вариант {,10} означает не более 10 раз.

  • Группы. Группировка символов и метасимволов с использованием скобок () позволяет накладывать ограничения с использованием тех же квантификаторов на целые фрагменты текста.

  • Ограничение на позицию. Символы, ограничивающие позицию фрагмента текста, обычно используют при решении задачи определения соответствия всей исходной строки требуемому шаблону. К примеру, символ “^” требует, чтобы следующий за ним фрагмент находился в начале строки, а символ “$” требует противоположного для фрагмента, ему предшествующего.

  • Логические операции над множествами. Символ “^” в контексте наборов соответствует отрицанию, а “|” - дизъюнкции (ИЛИ).

  • Модификаторы. Метасимволы, изменяющие настройки обработчика регулярных выражений. Например, (?i) отключает чувствительность к регистру символов, а (?-i) - включает. Поскольку i - это от слова ignore, то логичнее (?i) интерпретировать, как включение "нечувствительности", а (?-i) - ее отключение. Если вновь вернуться к исходному примеру, то добавление в начало инструкции (?i) избавило бы от необходимости включать в выражение перечисления заглавных и строчных букв, соответствующих началу ключевых слов. Чтобы не было путаницы, сразу скажу, что режим обработки регулярных выражений обучающей программы по умолчанию соответствует (?-i).

Важно: Особенности реализации поиска по регулярному выражению на языке программирования php, в том числе без учета регистра символов, описаны на странице простейшего веб-сервиса работы с регулярными выражениями. Этот сервис можно также использовать вместо или вместе с основным обучающим приложением.

Этим списком классификация метасимволов регулярных выражений не исчерпывается. Не все языки программирования реализуют поддержку регулярных выражений в полном объеме, а некоторые напротив: реализуют различные их расширения, синтаксис которых укладывается в общую канву. Я постарался перечислить те группы метасимволов, которые, скорее всего, входят в пересечение всех существующих реализаций, и применение которых не будет являться якорем в ходе переноса целевой функциональности с одного языка программирования на другой.

В заключении этой теоретической части приведу пример достаточно простого регулярного выражения, которое позволяет найти в тексте главной страницы этого сайта все словосочетания со стоп-словом "это" и его модификациями:

[Ээ]т\w{1,3}\s(\w+)

А вот, собственно, и результат:

Регулярные выражения. Поиск словосочетаний со стоп-словами
Поиск словосочетаний с использованием регулярных выражений.

Самостоятельно: Предлагаю выполнить поиск других шумовых слов или стоп-слов, к которым чаще всего относят служебные части речи, такие как местоимения, междометия, предлоги и т.п. Поисковики, как правило, отрицательно относятся к высокой концентрации подобного "мусора" в текстах интернет-страниц, но если их (стоп-слов) присутствие искусственно занижено, то читать такой текст в состоянии только сами поисковые роботы.

Читать дальше...

Компьютерные курсы и курсы программирования
Основы программирования

Курс для начинающих программистов на C# и VB.NET.

SQL 25™

Построение SQL запросов и работа с базой данных.

C# Quick Guide™

Программирование на C#. Краткое руководство.

RegEx

Применение регулярных выражений.

Plug-in архитектура

Примеры программной Plug-in архитектуры.

XML и его расширения

Язык разметки XML и его расширения с примерами.

HTML и разметка гипертекста

Языки HTML, XHTML и CSS с примерами разметки.

Основы веб-дизайна

Основы веб-дизайна: решения типовых задач верстки.

Программирование на PHP

Руководство по программированию на PHP для начинающих.

Справочные материалы

Шаблоны проектирования
Каталог шаблонов проектирования программных компонентов.

Рефакторинг кода
Каталог приемов рефакторинга программного кода.

Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь
.
Coding Craft. Все права защищены © 2011. Проект Инициативного Народного Фронта Образования - ИНФО-проект.