Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Отрицательные группы и якоряСодержание книги Поиск на нашем сайте
Рассмотрим некоторые более “продвинутые” конструкции регулярных выражений. Предполагается, что вы уже знаете, как указать регулярному выражению, какие символы и/или их последовательности должны быть в строке для совпадения. А что если нужно указать не те символы, которые должны присутствовать, а те которых не должно быть? То есть если нужно вывести лишь согласные буквы, вы можете их перечислить, а можете использовать и отрицательную группу с гласными, например: 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
|
||||||||||||||||
Последнее изменение этой страницы: 2017-02-06; просмотров: 226; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.166.141 (0.006 с.) |