почему это регулярное выражение не работает в powershell?

#c# #regex #powershell

#c# #регулярное выражение #powershell

Вопрос:

 $pattern = 'trigger(. ?)(r|n|rn){2}'
Write-Host "PATTERN $pattern"
Write-Host ("- trigger: blah`n blah`n blah blah`n`n not blah" -replace $pattern, "trigger: none")
 

Вывод должен быть «- trigger: none not blah»

Комментарии:

1. Это регулярное выражение не соответствует вашей входной строке, смотрите Здесь . Насколько я вижу, ваш ввод не содержит новой строки, но регулярное выражение вызывает ее (даже если этот шаблон выглядит немного странно). Попробуйте использовать trigger(. ?)[rn]* .

2. почему вы помечаете C # для powershell-вопроса?

Ответ №1:

Есть две проблемы:

  • . соответствует всему, кроме новых строк, используйте флаг inline (?s) или модифицированную точку [Ss]
  • r n — это разрыв строки Windows и n * unix; поэтому лучше сделать r необязательным ? : (r?n)
 $pattern = 'trigger([sS] ?)(r?n){2}'
Write-Host "PATTERN $pattern"
Write-Host ("- trigger: blah`n blah`n blah blah`n`n not blah" -replace $pattern, "trigger: none")
 

- trigger: none not blah