我在使用正则表达式中的可选组时出现问题(.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 :(得分:1)
根据您提供的样本数据,此正则表达式适用于我:
@"function\s+(\w+)\s*\{\s*(?:param\s*\(([^()]*)\))?"
正则表达式的主要问题是这部分:.*?\(
。当您匹配第二个函数时,.*?
会一直扫描该函数,并在第三个函数中找到左括号。
答案 1 :(得分:0)
试试这个:
function (?<name>\w+)\s*?\{\s*?(?<param>param\s*\([\s\S]*?\))?[\s\S]*?\}
编辑:奇怪,我在测试中无法匹配该可选param
组