在重复元素中捕获项目

时间:2013-06-13 15:44:44

标签: regex

我想改变这个:

Public [Function|Sub] XXXX(ByVal param1 As aaaa, ByVal param2 AS bbbb) As cccc

进入这个:

Log("Method XXXX:", "param1", param1, "param2", param2)

参数的数量是可变的。

我可以在纯正则表达式中进行,如果可以,我该怎么做? 我将使用这样一个简单的工具:http://gskinner.com/RegExr/为每个方法手动完成。

我在这里:

Public (Function|Sub) ([\w\d_]+)\((ByVal .* As .*)*\)( As [\w]+)?
Log("Method $2:", $3)

这给了我这个:

Log("Method XXXX:", ByVal param1 As aaaa, ByVal param2 AS bbbb)

这是向前迈出的一小步,但并不是一个大的......

问题在于,我不知道是否(以及如何)可以捕获重复的子项目。其他问题指出它不可能?

我需要在纯正则表达式中完成,而不是在代码中。否则,我会使用copypasta,但我希望最大化自动化。

谢谢!

1 个答案:

答案 0 :(得分:2)

这应该适合你:

搜索

/^[^\]]*[\]] ([\w\d_]+)\(ByVal ([^ ]*) As ([^,]*), ByVal ([^ ]*) As ([^,]*)\)( As [\w]+)/gi

替换(带变量值)

Log("Method $2:", $3, "$4", $5)

OR(带变量名)

Log("Method $2:", $2, "$4", $4)

实施例: http://regexr.com?357f4

修改

对于循环,您可以尝试3个正则表达式。首先只是改变你的开始:

搜索

/^[^\]]*[\]] ([\w\d_]+)/gi

替换

Log("Method $1:", 

示例:http://regexr.com?357fp

然后你会做“循环”,虽然没有真正循环。

搜索

/\({0,1}ByVal ([^ ]*) As([^,\)]*[\)]{0,1})/gi

替换

"$1:", $2

示例:http://regexr.com?357g2

然后删除结尾

搜索

/\).*/gi

替换

)

示例:http://regexr.com?357g5