Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Рассмотрим несколько примеров.
Следующее выражение выбирает процессы, у которых имя "начинается с буквы S, затем следует 1 или более любых символов, затем снова буква S и сразу после неё конец строки". Иначе говоря "имена, которые начинаются и заканчиваются на S" (рис.28): Get-Process | where {$_.name -match "^s.+s$"}
Рис. 28. Пример использования количественных модификаторов
Количественный модификатор \S* означает любое количество символов, не являющихся пробелами. Подобное выражение может совпасть и с ""(т.е. с пустой строкой), т.к. под любым количеством подразумевается и ноль. Пример использования такого модификатора (рис. 29): "abc", "cab", "ac","ac","abdec" -match "a\S*c"
Рис. 29. Использование модификатора \S*
В данном примере строка "ac" также является результатом, хотя между буквами a и c нет символов. Если заменить * на + то результат будет иной (рис.30): "abc", "cab", "ac","ac","abdec" -match "a\S+c"
Рис. 30. Использование модификатора \S+
Последовательность "бобр", после которой может идти символ "ы", а может и отсутствовать может быть обнаружена в нескольких строковых выражениях с помощью следующей команды (рис. 31): "бобр","бобры","бобрята" -match "^бобры?$"
Рис. 31. Пример использования модификатора ?
1.10.5. Группы захвата и переменная$matches Еще одной не менее важной возможностью регулярных выражений являются так называемые «группы захвата» (capturegroups). Как следует из названия, группы можно использовать для выделения и объединения (т.е. группировки) символов задаваемой строки. К группам захвата можно применять количественные модификаторы. Например, следующее регулярное выражение означает "Первая буква в строке – S, затем одна или больше групп, состоящих из “знака - (минус) и любого количества цифр за ним” до конца строки" (рис. 32): "S-1-5-21-1964843605-2840444903-4043112481" -match "^S(-\d+)+$"
Рис. 32. Пример строки символов, содержащей группу, задаваемую выражением "^S(-\d+)+$"
В данной строке символов может быть выделена группа -4043112481, удовлетворяющая заданному регулярному выражению. Особенностью групп захвата является то, что часть строки, подпавшая под подвыражение, находящееся внутри такой группы, помещается в специальную структуру данных $matches. $Matches - это массив, в котором может находится содержимое нескольких групп. Причем под индексом 0 туда помещается вся совпавшая строка, а начиная с индекса 1, размещается содержимое групп захвата. Рассмотримпример: "At 17:04 Firewall service was stopped." -match "(\d\d:\d\d) (\S+)" Индекс 0 (рис. 33) имеет вся часть строки, соответствующая регулярному выражению, индекс 1 соответствует содержимому первых скобок, индекс 2 соответственно содержимому вторых скобок. К содержимому $matches можно обращаться как к элементам любого другого массива в PowerShell либо только по имени, либо указывая индексы элементов: PS C:\> $matches[1] 17:04 PS C:\> $matches[2] Firewall
Рис. 33. Пример выделения групп захвата
Если в строке присутствует несколько групп захвата, то бывает полезно назначить им имена, что облегчает дальнейшую работу с полученными данными, например (рис. 34): "At 17:04 Firewall service was stopped." -match "(?<Время>\d\d:\d\d) (?<Служба>\S+)"
Рис. 34. Именование групп захвата
Именование групп имеет следующий синтаксис: (?<Название Группы>подвыражение) В группах знак вопроса, следующий сразу за открывающей скобкой, означает особый тип группы – именованную группу. Другой тип группы, который часто используется – незахватывающая группа. Она может пригодиться в тех случаях, когда не нужно захватывать содержимое группы, а надо применить её только для группировки. Например, в вышеприведённом примере (рис. 32), такая группа была бы более уместна (рис. 35): "S-1-5-21-1964843605-2840444903-4043112481" -match "^S(?:-\d+)+$"
Рис. 35. Пример незахватывающей группы
Синтаксис такой группы имеет вид: (?:подвыражение). |
||
Последнее изменение этой страницы: 2018-06-01; просмотров: 270. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |