正则表达式在 Powershell 上不起作用

正则表达式在 Powershell 上不起作用

背景:我需要在 C# 源文件中匹配多行模式(?)。正则表达式将由 Powershell 操作。我已经测试过,它在 RegexBuddy 上运行良好(使用 Dot Matches 换行符)。但是当我尝试通过 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),但这不起作用

提前求助并致谢!!(哎呀,我不能使用 grep/专用解析器/并且 findstr 在没有 hacl 等的情况下不能进行多行,因此需要 Powershell)

答案1

“(?m)”修饰符适用于 PowerShell 运算符(-match、-replace 等),但您使用的 .NET RegEx 类不使用 PowerShell 修饰符。在这种情况下,您可以使用 Multiline RegexOptions 标志:

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

但我认为点(“。”)永远无法匹配 .Net/PowerShell 中的换行符。您需要使用“\r\n”来匹配换行符。

相关内容