匹配含两个参数的函数调用的正则表达式
匹配恰好包含两个参数的函数调用的正则表达式
在多数编程语言中,函数调用的格式为函数名后接圆括号包裹的参数,示例如下:
my_function(); // no arguments my_function(one_argument); my_function(first_argument,second_argument); my_function(first_argument,second_argument,third_argument);
要精确匹配上述示例中恰好包含两个参数的函数调用,需要解决两个核心问题:正则中圆括号的转义,以及严格限制参数数量为两个。
常见直观写法的问题
类似\w+\([^)]+,[^)]+\)的写法会失效,原因有两点:
- 正则中的
(和)是特殊分组字符,未转义无法匹配实际的圆括号符号; [^)]+会匹配任意非)的字符(包括逗号),因此会错误匹配到三个及以上参数的调用(比如my_function(a,b,c)会被误匹配,因为第一个[^)]+会匹配a,b,第二个匹配c)。
针对示例场景的正确正则表达式
^\w+\(\s*\w+\s*,\s*\w+\s*\)$
正则各部分解释
^\w+:匹配行首的函数名(由字母、数字、下划线组成);\(:转义左圆括号,匹配实际的(符号;\s*:匹配参数前后可选的空白字符(兼容带空格的写法,比如my_func( arg1 , arg2 ));\w+:匹配第一个参数;\s*,\s*:匹配分隔两个参数的逗号,前后允许空白;\w+:匹配第二个参数;\):转义右圆括号,匹配实际的)符号;$:匹配行尾,确保圆括号后无多余内容,避免匹配参数超标的情况。
扩展说明
如果参数包含更复杂内容(比如带括号的表达式、字符串字面量等),上述基础正则无法满足需求,需要根据具体语言的语法规则进一步调整,但针对给出的示例场景,该正则可精准匹配目标函数调用。
内容的提问来源于stack exchange,提问作者Jay Bienvenu
相关产品推荐
相关产品推荐

