Regex 记事本++;:正则表达式来查找其参数也是函数的函数

Regex 记事本++;:正则表达式来查找其参数也是函数的函数,regex,notepad++,Regex,Notepad++,所以我有一个大的文本文件,我想搜索以下文本:“decode(max(ABC),null,'1',max(ABC)+1)” 我在记事本++中使用正则表达式如下: *decode(\s*)\(([^,]*),([^,]*),([^,]*),([^)]*)\) 但是找不到搜索结果。不确定您在这里查找的是什么,但这会捕获所有参数文本(我不确定为什么要捕获decode和左括号之间的潜在空白,因此我将其更改为非捕获组:(?:\s*)) 也就是说,它捕获了 max(ABC), null, '1', max(

所以我有一个大的文本文件,我想搜索以下文本:
“decode(max(ABC),null,'1',max(ABC)+1)”

我在记事本++中使用正则表达式如下:

*decode(\s*)\(([^,]*),([^,]*),([^,]*),([^)]*)\)

但是找不到搜索结果。

不确定您在这里查找的是什么,但这会捕获所有参数文本(我不确定为什么要捕获
decode
和左括号之间的潜在空白,因此我将其更改为非捕获组:
(?:\s*)

也就是说,它捕获了

max(ABC), null, '1', max(ABC) + 1
至于进一步将其解析为单独的参数,正如另一条评论中所建议的那样,这是一个兔子洞

请注意,此正则表达式假定
decode
函数调用的结束括号后面不再有括号

您可以在这里尝试:

我刚刚发现了debuggex,所以我也发布了他们的酷图片:)


此处的参数更可能是函数的返回值,而不是函数本身。顺便说一句,你的正则表达式前面的那颗星是怎么回事?如果你删除了它,你应该至少匹配你要找的部分内容。这也差不多是你能接近的了,不用进兔子洞。您基本上需要计算paren或使用递归表达式来匹配整个内容,而Notepad++显然使用POSIX REs(与PCRE相比非常糟糕)。@cHao Notepad++从6.0版开始就支持PCRE。@user694733:Ahh。出于某种原因,我有5.9分。这解释了一点。:)实际上,我会在解码之前添加一个单词边界:
\bdecode
max(ABC), null, '1', max(ABC) + 1
decode(?:\s*)\((.*)\)[^()]*$