RegEx和可选字符串

时间:2009-12-23 13:44:14

标签: regex string

我在使用正则表达式中的可选组时出现问题(.NET语法,我正在使用RegexOptions.Singleline)。

"function (\w*).*?{(?:.*?\((.*?)\))?.*?}"

也试过,无济于事: "function (\w*)[^{]+{(?:.*?\((.*?)\))?.*?}"

看起来这个组不是可选的,因为如果我只是在FunctionWithNoParameters中添加两个括号,那么一切都正常。目标是有两个组:函数名称及其可选参数。有人能帮助我吗?

我试图解析的文字是:

 function test1
{
    param ([int]$parm2, [bool]$parm3)
}

function FunctionWithNoParameters { 

return "nothing"
}

function test2    {
  param([string]$parm1, 
        [int]$parm2, 
        [bool]$parm3)}

谢谢, 亚历

2 个答案:

答案 0 :(得分:1)

根据您提供的样本数据,此正则表达式适用于我:

@"function\s+(\w+)\s*\{\s*(?:param\s*\(([^()]*)\))?"

正则表达式的主要问题是这部分:.*?\(。当您匹配第二个函数时,.*?会一直扫描该函数,并在第三个函数中找到左括号。

答案 1 :(得分:0)

试试这个:

function (?<name>\w+)\s*?\{\s*?(?<param>param\s*\([\s\S]*?\))?[\s\S]*?\}

编辑:奇怪,我在测试中无法匹配该可选param