背景:我需要在 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”来匹配换行符。