我正在尝试解析Powershell脚本的功能和参数。我几乎在那里,因为我遇到了换行问题。表达式将test2解析为test6,但是使用test1我无法使它工作。
我当然可以指定我的客户端不使用第一种语法,但必须有一种方法。有人能指出我正确的方向吗? FWIW:我在C#中使用它。
我正在使用的正则表达式是:“function (\w*)\s*\{\s*param\((.*)\)\s*}
”
内容testfile.ps1:
function test1 {
param([string]$parm1, [int]$parm2,
[bool]$parm3)}
function test2
{
param([int]$parm2, [bool]$parm3)
}
function test3
{ param(blabla3)}
function test4 { param(blabla4) }
function test5 {param(blabla5)}
function test6{param(blabla6)}
谢谢, 亚历
答案 0 :(得分:1)
因为您没有向您显示代码我猜您没有告诉Regex
对象允许换行。您可以使用RegexOptions.Singleline
选项执行此操作。这改变了行为。表达式允许它与换行符匹配(\ n)。但是,如果您这样做,您的表达式可能比您想要的更多。正则表达式是贪婪的,这个(.*)
将消耗到文件中的最后一个括号。你可能想尝试类似的东西:
function (\w*)\s*\{\s*param\(([^)]*)\)\s*}
答案 1 :(得分:0)
答案 2 :(得分:0)
function (\w*).*?\{.*?[A-Za-z]+\((.*?)\).*?}
在“。”上启用多行匹配如上所述并使用此。我对http://www.myregextester.com/进行了测试,似乎有效。
我已将\s*
替换为.*?
。这匹配任何字符,非贪婪,直到下一个指定的序列。