Метасимволы и операторы регулярных выражений




Метасимвол / оператор Значение
. Любой отдельный символ кроме символа перевода строки
^ Начало строки
$ Конец строки
[ ] Любой символ из заключенных в скобках (возможно задание диапазона символов, указав начальный и последний символы диапазона через дефис)
[^] Любой символ, кроме тех, что указаны в скобках
* Предшествующий шаблон встречается ноль и более раз
{n} Предшествующий шаблон встречается ровно n раз
{n,} Предшествующий шаблон встречается не менее, чем n раз
{,n} Предшествующий шаблон встречается не более, чем n раз
{n,m} Предшествующий шаблон встречается не менее n, чем n и не более, чем m раз
? Предшествующий шаблон встречается не более одного раза (расширение для egrep и awk)
+ Предшествующий шаблон встречается один и более раз (расширение для egrep и awk)
() Применяются для группировки выражений для последующего выполнения операций над ними
| Позволяет разделить допустимые варианты (логическое ИЛИ)
\ Отмена специального значения метасимвола, следующего за ним

 

Якорные метасимволы

Метасимвол.

Метасимвол. используется для поиска в тексте одиночных символов, кроме символа перевода строки.

Например, если требуется найти слова, начинающиеся на abc, заканчивающиеся символом z и состоящие из 5 символов, необходимо использовать шаблон

Abс.z

Шаблону соответствуют следующие варианты: abcdz, abc1z. Вариант abcddz не соответствует шаблону, так как вместо единичного символа между abc и z стоят два символа dd. Шаблоном для такого слова будет

Abс..z

Если требуется найти все слова, состоящие из 4 слов и начинающиеся на букву A, необходимо указать следующий шаблон

A…

 

Метасимвол ^

Якорный метасимвол ^ используется для поиска буквосочетаний или единичного символа, стоящих в начале строки.

Так шаблон

^abс

реализует поиск cтрок, начинающихся с буквосочетания abc. Шаблону соответствуют строки abc, abczzz. Строка dabc не соответствует шаблону так как буквосочетание abc находится не в начале слова.

 

Метасимвол $

Якорный метасимвол $ используется для поиска буквосочетаний или единичного символа, стоящих в конце строки.

Шаблону

de$

соответствуют все строки, заканчивющиеся буквосочетанием de, например, de, abcde.

Следующий шаблон соответствует пустой строке:

^$

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

^.$

Якорные метасимволы ^ и $ предназначены для обработки текста с привязкой к начальной и конечной позициям регулярного выражения соответственно. По этой причине их называют якорями.

 

Выбор альтернатив

Операция объединения обозначается метасимволом вертикальной черты | и часто используется в регулярных выражениях. Она поддерживает возможность выбора одной из возможных альтернатив, что позволяет объединять несколько регулярных фрагментов в общее регулярное выражение. Так два регулярных фрагмента UNIX и Windows могут быть связаны в одно общее регулярное выражение, обеспечивающее совпадение с любым из входных слов:

UNIX | Windows

Выражению будут соответствовать слова '' UNIX '' и '' Windows ''.

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

.| \n

 

Классы символов [ ]

Операция [ ] применяется когда необходимо задать набор символов, которые могут находиться в определенной позиции строки. Множество символов, каждый из которых может быть указан в текущей позиции, должны быть указаны внутри квадратных скобок.

Например шаблон

[Aa]bc

будет соответствовать строкам Abc и abc.

Такую конструкцию можно заменить операцией объединения и представить шаблон в виде

Abc|abc

Все метасимволы, указанные внутри [ ] «теряют» свои специальные свойства и интерпретируются как обыкновенные литералы. Исключение составляют три метасимвола

\ - ^

При этом метасимволы дефис - и циркуфлекс ^ интерпретируются различно в зависимости от местоположения внутри регулярного выражения, а метасимвол \ сохраняет свое специальное значение вне зависимости от контекста.

Классы символов, указанные внутри скобок могут быть:

· перечислительными;

· интервальными;

· инвертированными.

Перечислительная спецификация класса подразумевает последовательное указание всех символов класса, например,

[0123456789.,]

соответствует любому из перечисленных в скобках символу.

Если коды символов класса образуют непрерывную возрастающую последовательность, то удобно использовать интервальную спецификацию, где первый и последний символ последовательности разделяет знак дефиса. Так регулярное выражение

[0-9]

соответствует любой цифре от 0 до 9. При этом первый символ задаваемого диапазона должен иметь код ASCII меньший, чем последний. А противном случае, диапазон будет интерпретирован как три независимых символа 9, 0 и дефис - для следующего регулярного выражения (ИЛИ БУДЕТ ОШИБКА – В ЗАВИСИМОСТИ ОТ СРЕДЫПРИМЕНЕНИЯ)

[9-0]

Число интервалов в классе может быть произвольным, например, регулярное выражение

[0-9a-zA-Z]

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

[0-9abcdefABCDEF]

Если дефис - должен интерпретироваться в классе символов как символ, то он должен быть поставлен в начала или конце последовательности символов. Выражение

[-+0-9] или [+0-9-]

соответствует знакам +, - или любой цифре.

Часто бывает удобнее указать символы, которые не принадлежат некоторому диапазону, чем перечислять их. В этом случае используется инвертируемая запись, для задания которой первым в классе символов указывается циркумфлекс ^.

[Aa][^0-9]

Такая запись предполагает, что на первой позиции слова должна стоять буква A или a, а на второй позиции может идти любой символ, кроме цифры.

Циркумфлекс ^, расположенный в начале класса символов, инвертирует все символы, расположенные внутри. Так регулярное выражение

[^.,a-zA-Z]

соответствует любому символу кроме латинских букв, а также знаков. и,.

Если ^ поставить в середину или конец описания класса символов, он потеряет свое специальное назначение и будет интерпретирован как любой другой символ (литерал).

Следует также помнить, что символ циркумфлекс ^ имеет различный смысл внутри определения класса символов [ ] (инверсия) и за его границами (начало строки).

Символ отмены специального значения метасимвола \, находящийся внутри [ ], сохраняет свое специальное значение в любой части регулярного выражения и реализует действие экранирования. Это позволяет, например, использовать внутри [ ] управляющие символы, специфицированные литеральными константами. Так регулярное выражение

[\n\t]

соответствует двум знакам – горизонтальной табуляции и переводу строки соответственно.

Операцию [ ] можно использовать для экранирования знака пробела, который не является метасимволом, но требует экранирования при вставке в регулярное выражение. Внутри [ ] пробел не требует экранирования.

abc[ ]dfg

 

Квантификаторы

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

? + * { }

Кватификаторы указываются после литерала или класса символов, проверку повторения которых необходимо реализовать.

 

Квантификатор?

Данный квантификатор указывает на то, что предшествующий ему символ или класс символов может встречаться 0 или 1 раз. Например, шаблону

Abc?d

соответствуют два буквосочетания: Abcd и Abd (в данном случае буква c является необязательной).

 

Квантификатор *

Используется для обозначения ситуации, когда предшествующий ему литерал может находиться любое число раз (в том числе 0). Оператор * используется для обозначения натуральных чисел

[1-9][0-9]*

Квантификатор +

Оператор + гарантирует наличие как минимум одного экземпляра символа и допускает его неограниченное число повторений. Он может быть полезен, если требуется записать десятичное число, в котором потребовать наличие как минимум одного знака после запятой

[1-9][0-9]*\.[0-9]+

Регулярные выражения

[0-9]+

и

[0-9][0-9]*

являются эквивалентными.

 

Интервальный квантификатор { }

Позволяет задавать наименьшее обязательное и наибольшее возможное число повторений символа. Квантификатор имеет структуру

символ { n, m }

где n и m – целые неотрицательные десятичные числа, определяющие минимальное и максимальное количества повторений символа или фрагмента регулярного выражения, соответственно. Для n и m должна выполняться зависимость

n =< m

Строки, состоящие только из латинских букв верхнего и нижнего регистра и имеющие длину не более 5 символов (включая пустые строки, которые не содержат символов) можно определить с использованием регулярного выражения

[A-Za-z]{0,5}

Слова, состоящие строго из 5 латинских букв любого регистра, можно задать с помощью шаблона

[A-Za-z]{5,5}

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-11-01 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: