
go 正则替换一次的解决方法
在使用 go 正则表达式进行字符串替换时,有时可能会遇到只替换一次的情况。例如,以下代码:
package main
import (
"fmt"
"regexp"
)
func main() {
data := "这是zuojiankuohaophpcn一份youjiankuohaophpcn比较zuojiankuohaophpcn重要youjiankuohaophpcn的zuojiankuohaophpcn文件youjiankuohaophpcn"
re3, _ := regexp.compile(`zuojiankuohaophpcn(.*)youjiankuohaophpcn`)
rep := re3.replaceallstring(data, "#####")
fmt.println(rep)
}输出结果:
这是#####
代码中的正则表达式 旨在匹配所有尖括号中的内容。然而,它只替换了第一个匹配项,导致其他尖括号中的内容没有被替换。
要解决这个问题,可以在元字符 * 后面加上 ?,使其变为懒惰匹配模式。这样,正则表达式会匹配到所有尖括号中的内容,而不是尽可能多的字符。
因此,修改后的正则表达式为:
zuojiankuohaophpcn(.*?)youjiankuohaophpcn
使用懒惰模式后,代码输出结果如下:
这是#####比较#####的#####
通过使用懒惰模式,正则表达式可以正确匹配所有尖括号中的内容,并进行相应替换。










