PowerShell и регулярные выражения (Regex) (Найти, Заменить, Вхождения…). Перевод статьи

PowerShell and Regex Find, Replace, OccurrencesДанный материал является переводом оригинальной статьи "SID-500.COM : PowerShell and Regex (Find, Replace, Occurrences…)".

Хотите получить больше от PowerShell? Уточнить поиск? Просто сделать что-то лучше? Тогда попробуйте Regex (Regular Expressions). Операторы Regex делают возможным то, что кажется невозможным. В этом сообщении блога я покажу вам несколько примеров Regex, которые вы можете использовать. Давайте погрузимся в тему.

Я расскажу о следующих сценариях и проблемах:

  1. Найдите что-нибудь (буквы, точки…);
  2. Найдите и удалите вхождения;
  3. Найдите или удалите немецкие умляуты;
  4. Найдите адреса электронной почты по шаблону.

Далее рассмотрим примеры кода:

# Проверяем, содержит ли текст буквы (любые) ? ==> '\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}$'

Добавить комментарий