You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang正则表达式:提取带括号的函数名

解决从字符串中提取带括号的函数名问题

你的正则表达式存在三个关键问题:

  • 强制要求函数名前有\s+(空格),导致无前置空格的函数名无法匹配
  • 仅匹配带下划线的函数名(\w+_\w+),不符合示例中func1、func2这类无下划线的情况
  • 没有关联函数调用的核心特征(),无法精准识别函数调用

修正后的正则与代码

使用(?:^|\W)(\w+)\(作为正则表达式,配合Go的FindAllStringSubmatch提取函数名:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    // 正则解释:
    // (?:^|\W):匹配字符串开头或非单词字符(避免误匹配标识符的一部分)
    // (\w+):捕获函数名(由字母、数字、下划线组成,符合Go标识符规则)
    // \(:匹配函数调用的左括号,确保是函数而非普通标识符
    var re = regexp.MustCompile(`(?:^|\W)(\w+)\(`)
    testCases := []string{
        "A = 2&& B = 2 && func1(A) && func2(B)",
        "func1(A)",
        "B = 2 && func2(A)",
    }

    for _, str := range testCases {
        matches := re.FindAllStringSubmatch(str, -1)
        var funcNames []string
        for _, match := range matches {
            funcNames = append(funcNames, match[1])
        }
        fmt.Printf("字符串: %q\n提取的函数名: %s\n\n", str, funcNames)
    }
}

运行结果

字符串: "A = 2&& B = 2 && func1(A) && func2(B)"
提取的函数名: [func1 func2]

字符串: "func1(A)"
提取的函数名: [func1]

字符串: "B = 2 && func2(A)"
提取的函数名: [func2]

补充说明

如果你的函数名可能包含Unicode合法标识符字符,可以把\w替换为[\pL\pN_]来支持更广泛的标识符场景,针对当前示例的需求,\w已经完全够用。

内容的提问来源于stack exchange,提问作者Abi G

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 05:25:00