Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать неотразимый комплимент Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?

Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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





 

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

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

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 а$с а с

 








Date: 2015-05-23; view: 218; Нарушение авторских прав

mydocx.ru - 2015-2019 year. (0.008 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию