Данный материал является переводом оригинальной статьи "SID-500.COM : PowerShell and Regex (Find, Replace, Occurrences…)".
Хотите получить больше от PowerShell? Уточнить поиск? Просто сделать что-то лучше? Тогда попробуйте Regex (Regular Expressions). Операторы Regex делают возможным то, что кажется невозможным. В этом сообщении блога я покажу вам несколько примеров Regex, которые вы можете использовать. Давайте погрузимся в тему.
Я расскажу о следующих сценариях и проблемах:
- Найдите что-нибудь (буквы, точки…);
- Найдите и удалите вхождения;
- Найдите или удалите немецкие умляуты;
- Найдите адреса электронной почты по шаблону.
Далее рассмотрим примеры кода:
# Проверяем, содержит ли текст буквы (любые) ? ==> '\w'.
# В зависимости от результата, возвращаемые значения - True/False
'Vasya' -match '\w'
# Проверяем, содержит ли значение цифры (любые) ? ==> '/d':
'Vasya' -match '\d'
# Проверяем, есть ли в значении точка:
'vasya.pipkin@outlook.com' -match '\.'
'vasyapipkin@outlookcom' -match '\.'
# Начинается ли значение с буквы "V" ? ==> '^P'
'Vasya' -match '^V'
'Vasya' -match '^a'
# Начинается ли значение с цифры или буквы ?
# Примечание: используйте -cmatch вместо -match для для регистрочувствительных значений
'Vasya' -cmatch '^[A-Z]'
'Vasya' -cmatch '^[a-z]'
'Vasya' -match '^[0-9]'
# Заканчивается буквой ?
# Примечание: используйте -cmatch вместо -match для для регистрочувствительных значений
'Vasya' -cmatch '[A-Z]$'
'Vasya' -cmatch '[a-z]$'
# Удаление немецких умляутов
$names = 'Vasya Grünauer', 'Arnold Schwarzenegger', 'Hans Fetisch'
$names -match '[^a-zA-Z ]'
$names -match '[^a-zA-Z ]' -replace 'ü','ue' -replace 'ä','ae' -replace 'ö','oe'
# Удалить каждое второе вхождение
<#
^([^.]+.[^.]+) ==> Создайте группу (первая группа всегда $1).
Захватите первые два разделенных токена в начале (^).
$1* ==> Найдите группу $1 и замените следующий символ (.) на *
Примечание: [^.] значит Нет точки.
#>
# Заменить вторую точку:
'vasya.pipkin@outlook.com' -replace '^([^.]+.[^.]+).', '$1*'
# Заменить первую точку:
'vasya.pipkin@outlook.com' -replace '^([^.]+).', '$1*'
# Заменить третью (последнюю) точку:
'vasya.pipkin@outlook.com.com' -replace '^([^.]+.[^.]+.[^.]+).', '$1*'
# Заменить точку на конце строки:
'vasya.pipkin@outlook.com.com.' -replace '[.]$', ''
# Заменить всё после третьей точки
$a = 'vasya.pipkin@outlook.com.com.'
$b = [regex]::Match($a, '^([^.]+.[^.]+.[^.]+).').value
$b.substring(0,$b.length-1)
# Заканчивается лт двумя или четырьмя буквами (найти всё похожее на адреса электронной почты) ?
'vasya.pipkin@outlook.com' -match '^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]{2,4}$'
'vasya.pipkin@outlook.domain' -match '^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]{2,4}$'
'vasya.pipkin@outlookdomain' -match '^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]{2,4}$'
Добавить комментарий