Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Рассмотрим несколько примеров.




Следующее выражение выбирает процессы, у которых имя "начинается с буквы 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 не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...