如何构建正则表达式替换HTTP动词前的所有内容?
Go正则表达式替换HTTP动词前内容的正确方案
问题分析
你当前的正则是直接匹配HTTP动词并替换为空,导致动词被删除,出现//的错误结果。正确思路是匹配从字符串开头到第一个HTTP动词之前的所有内容,再将这部分替换为hello/。
正确正则表达式与代码实现
使用正向预查定位HTTP动词,确保只替换动词之前的部分,保留动词及后续内容:
package main import ( "fmt" "regexp" ) func main() { inputStrs := []string{ "foo/bar/GET/v1/fuzz", "foo/PUT/fuzz", "foo/bar/POST/v1/fuzz/bar", } // 正则解释: // ^:匹配字符串起始位置 // .*?:非贪婪匹配任意字符,直到满足后续预查条件 // (?=(HTTP_VERBS)/):正向预查,确保后续紧跟指定HTTP动词和斜杠(这部分不参与替换) re := regexp.MustCompile(`^.*?(?=(GET|HEAD|POST|PUT|PATCH|DELETE|CONNECT|OPTIONS|TRACE)/)`) for _, str := range inputStrs { result := re.ReplaceAllString(str, "hello/") fmt.Println(result) } }
运行结果
hello/GET/v1/fuzz hello/PUT/fuzz hello/POST/v1/fuzz/bar
关键说明
- 使用
.*?非贪婪匹配,避免过度匹配到后续内容(比如字符串中存在多个HTTP动词时,确保只替换第一个动词前的部分) - 正向预查
(?=...)不会将HTTP动词纳入匹配范围,因此替换后动词会被完整保留
内容的提问来源于stack exchange,提问作者akko
相关产品推荐
相关产品推荐

