Назад | Перейти на главную страницу

Регулярное выражение не работает в Powershell

Справочная информация: мне нужно сопоставить многострочный шаблон (?) В исходном файле C #. Регулярное выражение будет обрабатываться Powershell. Я протестировал, и он работает на RegexBuddy (с новой строкой «Точка соответствует». Но когда я пытаюсь использовать его через PowerShell, он не работает.

Регулярное выражение:

[\s]*(?!\/)\[Role.*?\].*?\(.*?\).*?;

Код C #:

[Role (MethodName ="param")]
void  doSomething(Param1 Param2);

Код Powershell:

$FunctionPattern="^[\s]*(?!\/)\[Role.*?\].*?\(.*?\).*?;"
$FunctionMatch =[regex]::matches($Data,$FunctionPattern)
$FunctionMatch | format-table index,length,value -auto

В соответствии с этот, чтобы Powershell использовал многострочность, я должен использовать конструкцию (? m), но это не работает

Помогите и заранее спасибо !! (Opps, я не могу использовать grep / выделенные парсеры /, а findstr не работает в несколько строк без hacl и т.д., следовательно, необходимость в Powershell)

Модификатор «(? M)» применяется к операторам PowerShell (-match, -replace и т. Д.), Но вы используете класс .NET RegEx, который не использует модификаторы PowerShell. В этом случае вы можете использовать флаг Multiline RegexOptions:

[regex]::matches($Data, $FunctionPattern, "Multiline")

Но я не думаю, что точка (".") Когда-либо соответствует символам новой строки в .Net / PowerShell. Вам нужно будет использовать "\ r \ n" для соответствия новым строкам.