RegEx获取脚本&参数..差不多了

时间:2009-12-18 17:25:50

标签: c# regex newline

我正在尝试解析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)}

谢谢, 亚历

3 个答案:

答案 0 :(得分:1)

因为您没有向您显示代码我猜您没有告诉Regex对象允许换行。您可以使用RegexOptions.Singleline选项执行此操作。这改变了行为。表达式允许它与换行符匹配(\ n)。但是,如果您这样做,您的表达式可能比您想要的更多。正则表达式是贪婪的,这个(.*)将消耗到文件中的最后一个括号。你可能想尝试类似的东西:

function (\w*)\s*\{\s*param\(([^)]*)\)\s*}

答案 1 :(得分:0)

您的正则表达式是单线还是多线匹配模式?

我想:

"^function (\w*)\s*\{\s*param\((.*)\)\s*}$"

可能在多行模式下工作。我现在没有Expresso可用来测试它。

答案 2 :(得分:0)

function (\w*).*?\{.*?[A-Za-z]+\((.*?)\).*?}

在“。”上启用多行匹配如上所述并使用此。我对http://www.myregextester.com/进行了测试,似乎有效。

我已将\s*替换为.*?。这匹配任何字符,非贪婪,直到下一个指定的序列。