Метасимволы и операторы в регулярных выражениях
В таблице 2.1 приведены метасимволы и операторы, используемые в регулярных выражениях.
Таблица 2.1
Метасимволы и операторы регулярных выражений
Метасимвол / оператор | Значение |
. | Любой отдельный символ кроме символа перевода строки |
^ | Начало строки |
$ | Конец строки |
[ ] | Любой символ из заключенных в скобках (возможно задание диапазона символов, указав начальный и последний символы диапазона через дефис) |
[^] | Любой символ, кроме тех, что указаны в скобках |
* | Предшествующий шаблон встречается ноль и более раз |
{n} | Предшествующий шаблон встречается ровно n раз |
{n,} | Предшествующий шаблон встречается не менее, чем n раз |
{,n} | Предшествующий шаблон встречается не более, чем n раз |
{n,m} | Предшествующий шаблон встречается не менее n, чем n и не более, чем m раз |
? | Предшествующий шаблон встречается не более одного раза (расширение для egrep и awk) |
+ | Предшествующий шаблон встречается один и более раз (расширение для egrep и awk) |
( ) | Применяются для группировки выражений для последующего выполнения операций над ними |
| | Позволяет разделить допустимые варианты (логическое ИЛИ) |
\ | Отмена специального значения метасимвола, следующего за ним |
Синие строки таблицы соответствуют метасимволам, а зеленые – операторам. Особенностью операторов является то, что они не могут применяться самостоятельно, без указания символа, относительно которого они действуют. Оператор действует на обычный или метасимвол, стоящий перед ним.
|
|
Якорные метасимволы
Метасимвол .
Метасимвол . используется для поиска в тексте одиночных символов, кроме символа перевода строки.
Например, если требуется найти слова, начинающиеся на abc, заканчивающиеся символом z и состоящие из 5 символов, необходимо использовать шаблон
Abс . z
Шаблону соответствуют следующие варианты: abc d z, abc 1 z. Вариант abc dd z не соответствует шаблону, так как вместо единичного символа между 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- ]
соответствует знакам +, - или любой цифре.
Следует отметить, что указанному классу символов соответствует лишь один символ, указанный внутри [ ]. Если необходимо задать регулярное выражение, состоящее из 2 и более символов класса, следует указывать их последовательно в регулярном выражении или использовать операторы итерации. Например двузначному натуральному числу будет соответствовать выражение
[1-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 }
Следует отметить, что все квантификаторы во время работы реализуют принцип максимального совпадения, то есть определяют максимальный по длине фрагмент исходного текста поиска, совпадающий с заданным регулярным выражением.
Группировка и ограничение
Метасимвол круглые скобки ( ), предназначенный для изменения приоритета операций или ограничения области действия регулярных операций, позволяет существенно расширить возможности регулярных выражений. Так же как и в арифметических выражениях, ( ) имеют наивысший приоритет и операции в них выполняются в первую очередь.
Рассмотрим шаблон
a [ ] b | c [ ] d
В связи с тем, что оператор [ ] имеет более высокий приоритет, чем | , шаблону будут соответствовать варианты записей a b и с d. Если изменить шаблон, добавив в него метасимвол ( ),
a [ ]( b | c )[ ] d
то выражению будут соответствовать строки вида a b d или a c d, так как будет изменен исходный приоритет операций.
Кроме того, круглые скобки ( ) позволяют объединять символы в последовательности, операторы к которым применяется совместно. Например, шаблону
Abс +
соответствует строкам Abс, Abсс, Abссссс и пр. (то есть оператор + применен лишь к последнему символу регулярного выражения).
Регулярному выражению
A ( bс )+
соответствуют строки Abс, Abсbс, Abсbсbсbсbс и пр.
Дата добавления: 2020-01-07; просмотров: 187; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!