Справочная информация: мне нужно сопоставить многострочный шаблон (?) В исходном файле 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" для соответствия новым строкам.