2009-12-23 30 views
0

我在正则表达式(.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)} 

谢谢, 亚历克斯

+0

你不想用正则表达式来解析非常规语言,对吗? – Gumbo 2009-12-23 13:51:16

+0

不,我不是。这可能不是最好的办法,对于这个问题;) 我想获得一个PowerShell脚本中的所有功能(和他们的参数)... – Alex 2009-12-23 13:54:57

回答

0

试试这个:

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

编辑:奇怪,我不能” t与我测试中的可选param组相匹配

+0

这两个组合可以做的伎俩,我认为: '功能(\ w *)[^ {] + {\ s *(? param \ s * \([\ s \ S] *?\))?。*?}' 但是...现在我得到词“param”和括号。 – Alex 2009-12-23 14:26:57

1

此正则表达式对我的作品给你提供的样本数据:

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

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

相关问题