Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Отрицательные группы и якоря

Поиск

 

Рассмотрим некоторые более “продвинутые” конструкции регулярных выражений.

Предполагается, что вы уже знаете, как указать регулярному выражению, какие символы и/или их последовательности должны быть в строке для совпадения. А что если нужно указать не те символы, которые должны присутствовать, а те которых не должно быть? То есть если нужно вывести лишь согласные буквы, вы можете их перечислить, а можете использовать и отрицательную группу с гласными, например:

PS C:\> "a","b","c","d","e","f","g","h" -match "[^aoueyi]"

b

c

d

f

g

h

"Крышка" в качестве первого символа группы символов означает именно отрицание. То есть на месте группы может присутствовать любой символ кроме перечисленных в ней. Для того чтобы включить отрицание в символьных группах (\d, \w, \s), не обязательно заключать их в квадратные скобки, достаточно перевести их в верхний регистр. Например \D будет означать "что угодно, кроме цифр", а \S "всё кроме пробелов"

PS C:\> "a","b","1","c","45" -match "\D"

a

b

c

PS C:\> "a","-","*","c","&" -match "\W"

-

*

&

Символьные группы позволяют указать лишь содержимое одной позиции, один символ, находящийся в неопределенном месте строки. А что если надо например выбрать все слова которые начинаются с буквы w? Если просто поместить эту букву в регулярное выражение, то оно совпадёт для всех строк, где w вообще встречается, и не важно – в начале, в середине или в конце строки. В таких случаях на помощь приходят " якоря ". Они позволяют производить сравнение, начиная с определенной позиции в строке.

^ (крышка) является якорем начала строки, а $ (знак доллара) - обозначает конец строки.

Не запутайтесь - ^ как символ отрицания используется лишь в начале группы символов, а вне группы - этот символ является уже якорем. Авторам регулярных выражений явно не хватало специальных символов, и они по возможности использовали их более чем в одном месте.

Пример. Вывод списка процессов, имена которых начинаются с буквы w:

 

PS C:\> Get-Process | where {$_.name -match "^w"}

 

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName

--- ------ ----- ----- ----- ------ -- -----------

80 10 1460 156 47 0,11 452 wininit

114 9 2732 1428 55 0,56 3508 winlogon

162 11 3660 1652 44 0,14 3620 wisptis

225 20 5076 4308 95 31,33 3800 wisptis

 

Эта команда вывела процессы, у которых сразу после начала имени (^) следует символ w. Иначе говоря, имя начинается на w. Для усложнения примера, и для упрощения понимания, добавим сюда “крышку” в значении отрицательной группы:

PS C:\> Get-Process | where {$_.name -match "^w[^l-z]"}

 

Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName

------- ------ ----- ----- ----- ------ -- -------

80 10 1460 156 47 0,11 452 wininit

114 9 2732 1428 55 0,56 3508 winlogon

162 11 3660 1652 44 0,14 3620 wisptis

225 20 5076 4308 95 31,50 3800 wisptis

Теперь команда вывела процессы, у которых имя начинается с символа w, а следующий символ является чем угодно, только не символом из диапазона l-z.

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

PS C:\> "Яблоки","Груши","Дыня","Енот","Апельсины","Персик" -match "[ыи]$"

Яблоки

Груши

Апельсины

Это выражение вывело нам все слова в которых последняя буква И или Ы.

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

PS C:\> "abc","adc","aef","bca","aeb","abec","abce" -match "^a.[cb]$"

abc

adc

aeb

Это регулярное выражение выводит все строки, которые начинаются с буквы А, за которой следует один любой символ (точка), затем символ C или B и затем конец строки.

Обозначения некоторых классов символов (метасимволы) приведены в табл. 3
Таблица 3. Метасимволы, используемые в регулярных выражениях

Метасимвол Описание метасимвола
.(точка) Предполагает, что в конечном выражении на ее месте будет стоять любой символ. Продемонстрируем это на примере набора английских слов: Исходный набор строк: wake make machine cake maze Регулярное выражение: ma.e Результат: make maze
\w Замещает любые символы, которые относятся к буквам, цифрам и знаку подчеркивания. Пример: Исходный набор строк: abc а$с a1c а с Регулярное выражение: a\wc Результат: abc a1c
\W Замещает все символы, кроме букв, цифр и знака подчеркивания (то есть является обратным метасимволу \w). Пример: Исходный набор строк: abc а$с a1c а с Регулярное выражение: a\Wc Результат: а$с а с
\d Замещает все цифры. Продемонстрируем его действие на том же примере: Исходный набор строк: abc а$с a1c а с Регулярное выражение:a\dc Результат: alc
\D Замещает все символы, кроме цифр, например: Исходный набор строк: abc а$с alc а с Регулярное выражение:a\Dc Результат: abc а$с а с

 


 



Поделиться:


Последнее изменение этой страницы: 2017-02-06; просмотров: 226; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.166.141 (0.006 с.)