当前位置:网站首页>Golang 使用正则来匹配出子字符串函数
Golang 使用正则来匹配出子字符串函数
2022-06-27 19:18:00 【禅与计算机程序设计艺术】
const SERVICE_IMPL_RULE = ".*?\\.NewServer\\(new\\((.*?)\\)\\)"
// getServiceImpl 返回: CompassInsightServiceImpl
//{
{ .ServiceImpl }} = CompassInsightServiceImpl
// svr := insight_service.NewServer(new(CompassInsightServiceImpl))
func getServiceImpl(filePath string) string {
f, err := os.Open(filePath)
if err != nil {
return ""
}
buf := bufio.NewReader(f)
for {
line, err := buf.ReadString('\n')
line = strings.TrimSpace(line)
if strings.Contains(line, ".NewServer(new(") {
byRegex, err := GetOneStringByRegex(line, SERVICE_IMPL_RULE)
if err != nil {
log.Error(err)
return ""
}
return byRegex
}
if err != nil {
if err == io.EOF {
return ""
}
return ""
}
}
}
const SVR_RULE = "svr := (.*?)\\.NewServer\\(new\\(.*?\\)\\)"
// getNewServerCodeLine 返回: insight_service
// originLine = svr := insight_service.NewServer(new(CompassInsightServiceImpl))
//{
{ .NewServerCodeLine }} = insight_service
//svr := {
{ .NewServerCodeLine }}.NewServer({
{ .ServiceImpl }}, server.WithMiddleware(transform.ServerTransform), server.WithMiddleware(logmv.ServerLog))
//svr := insight_service.NewServer( CompassInsightServiceImpl, server.WithMiddleware(transform.ServerTransform), server.WithMiddleware(logmv.ServerLog))
func getNewServerCodeLine(filePath string) string {
f, err := os.Open(filePath)
if err != nil {
return ""
}
buf := bufio.NewReader(f)
for {
line, err := buf.ReadString('\n')
line = strings.TrimSpace(line)
if strings.Contains(line, ".NewServer(new(") {
byRegex, err := GetOneStringByRegex(line, SVR_RULE)
if err != nil {
log.Error(err)
return ""
}
return byRegex
}
if err != nil {
if err == io.EOF {
return ""
}
return ""
}
}
}
// GetOneStringByRegex 使用正则来匹配出子字符串函数:
//使用案例:
//从 img[/static/upload/xxxx/xxx.jpg] 中获取 xxxx/xxx.jpg
//url, _ = GetOneStringByRegex(str, "img\\[.*?/static/upload/(.*?)\\]")
func GetOneStringByRegex(str, rule string) (string, error) {
reg, err := regexp.Compile(rule)
if reg == nil || err != nil {
return "", errors.New("正则Compile错误:" + err.Error())
}
//提取关键信息
result := reg.FindStringSubmatch(str)
if len(result) < 1 {
return "", errors.New("没有获取到子字符串")
}
return result[1], nil
}
边栏推荐
- shell脚本控制服务的启动和关闭 - 具备详细案例
- 基于微信小程序的高校毕业论文管理系统#毕业设计
- Flexible IP network test tool -- x-launch
- 体验Navicat Premium 16,无限重置试用14天方法(附源码)
- 众昂矿业:新能源或成萤石最大应用领域
- 分享一次自己定位 + 解决问题的经历
- Animal breeding production virtual simulation teaching system | Sinovel interactive
- 行业案例|从零售之王看银行数字化转型的运营之道
- ABAP-CL_ OBJECT_ Collection tool class
- AI 绘画极简教程
猜你喜欢
Data platform scheduling upgrade and transformation | operation practice from Azkaban smooth transition to Apache dolphin scheduler
Model reasoning acceleration based on tensorrt
Show the comprehensive strength of strong products, and make the first show of 2022 Lincoln aviator in Southwest China
Wechat applet based service management system for college party members' Home System applet graduation design, Party members, activists, learning, punch in, forum
Unleash the innovative power of open source database | [Gansu] opengauss meetup has come to a successful conclusion
How to do a good job of gateway high availability protection in the big promotion scenario
Use the storcli tool to configure raid. Just collect this article
Ceph分布式存储
MYSQL 性能优化 index 函数,隐藏,前缀,hash 索引 使用方法(2)
SQL Server for循环用法
随机推荐
AI 绘画极简教程
抖音的兴趣电商已经碰到流量天花板?
At 19:00 on Tuesday evening, the 8th live broadcast of battle code Pioneer - how to participate in openharmony's open source contribution in multiple directions
shell脚本控制服务的启动和关闭 - 具备详细案例
Data platform scheduling upgrade and transformation | operation practice from Azkaban smooth transition to Apache dolphin scheduler
Educational Codeforces Round 108 (Rated for Div. 2)
数据平台调度升级改造 | 从Azkaban 平滑过度到Apache DolphinScheduler 的操作实践
MYSQL 性能优化 index 函数,隐藏,前缀,hash 索引 使用方法(2)
Zhongang Mining: the largest application field of new energy or fluorite
银河麒麟系统局域网文件共享教程
SQL必需掌握的100个重要知识点:用通配符进行过滤
DO280OpenShift访问控制--security policy和章节实验
BTC和ETH重新夺回失地!引领市场复苏?加密将步入“冰河时代”!
Love math experiment | phase 9 - intelligent health diagnosis using machine learning method
squid代理服务器
事件相关电位ERP的皮层溯源分析
ARCS模型介绍
OpenSSL 编程 二:搭建 CA
分享下我是如何做笔记的
Is it safe to open an account and buy stocks? Who knows