Интернет магазин китайских планшетных компьютеров |
||||
Компьютеры - Регулярные выражения - Синтаксис22 января 2011Оглавление: 1. Регулярные выражения 2. История 3. В теории формальных языков 4. Синтаксис 5. Разновидности регулярных выражений 6. Нечёткие регулярные выражения 7. Реализации Представление символовОбычные символы и специальные символыБольшинство символов в регулярном выражении представляют сами себя за исключением специальных символов
Аналогично могут быть представлены другие специальные символы. Часть символов, которые в той или иной реализации не требуют экранирования, могут быть экранированы из соображений удобочитаемости. Любой символМетасимвол Символьные классыНабор символов в квадратных скобках Если требуется указать символы, которые не входят в указанный набор, то используют символ Добавление в набор специальных символов путём экранирования самый бесхитростный способ. Однако в современных регулярных выражениях унаследован также и традиционный подход см. Традиционные регулярные выражения. Некоторые символьные классы можно заменить специальными метасимволами:
Позиция внутри строкиСледующие символы позволяют спозиционировать регулярное выражение относительно элементов текста: начала и конца строки, границ слова.
КвантификацияКвантификатор после символа, символьного класса или группы определяет, сколько раз предшествующее выражение может встречаться. Следует учитывать, что квантификатор может относиться более чем к одному символу в регулярном выражении, только если это символьный класс или группа.
Часто используется последовательность Символьные классы в сочетании с квантификаторами позволяют устанавливать соответствия с реальными текстами. Например, столбцами цифр, телефонами, почтовыми адресами, элементами HTML-разметки и др. Если символы Жадная и ленивая квантификацияПример использования жадных и ленивых выражений
Выражение
Чтобы выделить отдельные теги, можно применить ленивую версию этого выражения:
В некоторых реализациях квантификаторам в регулярных выражениях соответствует максимально длинная строка из возможных. Это может оказаться значительной проблемой. Например, часто ожидают, что выражение
Эту проблему можно решить двумя способами.
Использование ленивых квантификаторов может повлечь за собой обратную проблему, когда выражению соответствует слишком короткая, в частности, пустая строка.
Также общей проблемой как жадных, так и ленивых выражений являются точки возврата для перебора вариантов выражения. Точки ставятся после каждой итерации квантификатора. Если интерпретатор не нашёл соответствия после квантификатора, то он начинает возвращаться по всем установленным точкам, пересчитывая оттуда выражение по-другому. Ревнивая квантификацияПри поиске выражения
При использовании ревнивого квантификатора будет выполнен только первый шаг алгоритма. В отличие от обычной квантификации, ревнивая квантификация не только старается найти максимально длинный вариант, но ещё и не позволяет алгоритму возвращаться к предыдущим шагам поиска для того, чтобы найти возможные соответствия для оставшейся части регулярного выражения. Использование ревнивых квантификаторов увеличивает скорость поиска, особенно в тех случаях, когда строка не соответствует регулярному выражению. Кроме того, ревнивые квантификаторы могут быть использованы для исключения нежелательных совпадений.
ГруппировкаОбозначение группыКруглые скобки используются для определения области действия и приоритета операций. Шаблон внутри группы обрабатывается как единое целое и может быть квантифицирован. Например, выражение Обратная связьОдно из применений группировки повторное использование ранее найденных групп символов. При обработке выражения подстроки, найденные по шаблону внутри группы, сохраняются в отдельной области памяти и получают номер начиная с единицы. Каждой подстроке соответствует пара скобок в регулярном выражении. Квантификация группы не влияет на сохранённый результат, то есть сохраняется лишь первое вхождение. Обычно поддерживается до 9 нумерованных подстрок с номерами от 1 до 9, но некоторые интерпретаторы позволяют работать с большим количеством. Впоследствии в пределах данного регулярного выражения можно использовать обозначения от Например, регулярное выражение Также ранее найденные подстроки можно использовать при замене по регулярному выражению. В таком случае в замещающий текст вставляются те же обозначения, что и в пределах самого выражения. Группировка без обратной связиЕсли группа используется только для группировки и её результат в дальнейшем не потребуется, то можно использовать группировку вида Атомарная группировкаАтомарная группировка), так же как группировка без обратной связи, не создаёт обратных связей. В отличие от неё, такая группировка запрещает возвращаться назад по строке, если часть шаблона уже найдена.
Атомарная группировка выполняется ещё быстрее, чем группировка без обратной связи, и сохраняет процессорное время при выполнении остального выражения, так как запрещает проверку любых других вариантов внутри группы, когда один вариант уже найден. Это очень полезно при оптимизации групп со множеством различных вариантов. МодификаторыМодификаторы действуют с момента вхождения и до конца регулярного выражения или противоположного модификатора. Некоторые интерпретаторы могут применить модификатор ко всему выражению, а не с момента его вхождения.
Группы-модификаторы можно объединять в одну группу: КомментарииДля добавления комментариев в регулярное выражение можно использовать группы-комментарии вида ПеречислениеВертикальная черта разделяет допустимые варианты. Например, Если требуется указать перечень вариантов внутри более сложного регулярного выражения, то его нужно заключить в группу. Например, Просмотр вперёд и назадВ большинстве реализаций регулярных выражений есть способ производить поиск фрагмента текста, «просматривая» окружающий текст, который расположен до или после искомого фрагмента текста. Например, таким способом легко найти имя тега HTML, не включая в результат поиска окружающие его угловые скобки или другие знаки, но и не упуская их «из внимания» при поиске нужного контекста. Просмотр с отрицанием используется реже и «следит» за тем, чтобы указанные соответствия, напротив, не встречались до или после искомого текстового фрагмента.
Поиск по условиюВо многих реализациях регулярных выражений существует возможность выбирать, по какому пути пойдёт проверка в том или ином месте регулярного выражения на основании уже найденных значений.
Просмотров: 7078
|