Expressão regular não funciona no Powershell

3

Antecedentes: Eu preciso corresponder um padrão de múltiplas linhas (?) Em um arquivo de origem C #. A expressão regular será manipulada por Powershell. Eu testei e funciona no RegexBuddy (com a nova linha Dot Matches ". Mas quando eu tento usá-lo via powershell, ele não funciona.

Regex:

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

Código C #:

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

Código do Powershell:

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

De acordo com isso , para o Powershell usar multilinha, eu tenho que usar o contruct (? m) mas isso não funciona

Ajuda e obrigado antecipadamente !! (Opps eu não posso usar parsers grep / dedicado / e findstr não para multiline sem um hacl etc daí a necessidade de Powershell)

    
por thugzclub 06.03.2012 / 13:50

1 resposta

2

O modificador "(? m)" aplica-se aos operadores do PowerShell (-match, -replace, etc), mas você está usando a classe .NET RegEx que não usa os modificadores do PowerShell. Nesse caso, você pode usar o sinalizador Multiline RegexOptions:

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

Mas eu não acho que o dot (".") sempre corresponda às novas linhas no .Net / PowerShell. Você precisará usar "\ r \ n" para corresponder às novas linhas.

    
por 06.03.2012 / 14:56