Регулярное выражение PowerShell 3 - почему не работает регистр? - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь выяснить, почему приведенный ниже код не будет совпадать, когда дело обстоит иначе. Причина для 3-й / 4-й строки состоит в том, чтобы объединить мои фильтры журналов в одно выражение, но при этом разрешить использовать запятые.

Я пробовал несколько разных способов, но дело все еще имеет значение.

$combined_log = {"A", "B", "Error"}
$Log_Filters = "ERROR", "failed", "Note", "Warning"
#[regex]$Log_Filter_regex =  '(?i)^(' + (($Log_Filters|foreach{[regex]::escape($_) -replace ",","\,"}) –join "|") + ')$'
[regex]$Log_Filter_regex =  (($Log_Filters|foreach {[regex]::escape($_) -replace ",","\,"}) –join "|") 
$combined_log | where {$_ -imatch $Log_Filter_regex} 

1 Ответ

0 голосов
/ 09 мая 2018

Операторы -match / -imatch ожидают следования строковому шаблону, поэтому удалите [regex] из строки кода:

$Log_Filter_regex =  (($Log_Filters|foreach {[regex]::escape($_) -replace ",","\,"}) –join "|")

Шаблон будет выглядеть как ERROR|failed|Note|Warning, и вы получите совпадение.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...