正则表达式rpg功能

时间:2013-08-06 07:36:46

标签: java regex

(希望写一个好问题)。

我必须使用正则表达式匹配Java中的RPG函数。 我所拥有的功能有以这些可能的方式:

nameFunction()
nameFunction(params)
nameFunction('otherFunction(' + variable + ')')
nameFunction('otherFunction.get('''+trim(string_variable)+''')')
fun1() + fun2()

'用于打开/关闭字符串,''也用作'本身的转义字符。 我已经试过这个正则表达式了:

 \w+\([^\)]*\)

在\ w +我希望匹配名称的地方,然后是(,所有字符,但没有紧密的括号,最后是封闭的字符。 前两个函数被正确识别,但第三个和第四个函数没有。正则表达式匹配

nameFunction('otherFunction(' + variable + ')
nameFunction('otherFunction.get('''+trim(string_variable)

跳过第三个中的最后一个闭括号和第四个中的字符串连接(第五个例子是为了表明我可以有多个函数,我想分别识别它们)。 有什么建议?提前谢谢。

3 个答案:

答案 0 :(得分:1)

如果字符串没有转义符,您可以使用:

\w+\((?:[^'()]|'[^']*')*\)

如果你想处理反斜杠转义,你可以用:

\w+\((?:[^'()]|'(?:[^'\\]|\\.)*')*\)

答案 1 :(得分:0)

您的问题是您不允许在函数参数中使用右括号。

\w+\(.*\)

这样就可以了。

答案 2 :(得分:0)

如果您只想在第一个(之前匹配文本以及最外侧括号之间的所有文本,那么这个基于正面的负面预测将适用于您:

Pattern p = Pattern.compile("(\\w+)\\s*\\((.*?)\\)(?![^)]*\\))");

使用了所有4个示例。

在线演示:http://fiddle.re/rmy3a