
go 正则匹配为什么只替换一次?
在 go 中,使用正则表达式时,你可能会遇到只替换一次匹配内容的情况。本文将探讨这个问题并提供解决方法。
在你的代码中,你使用了正则表达式 来查找以 括起来的文本。但是,正则表达式引擎默认贪婪,这意味着它会尽可能多地匹配。因此,它只匹配了第一个 之间的文本,即 "”。
要解决此问题,你可以将正则表达式修改为懒惰模式。这可以通过在元字符后面添加一个 ? 来实现。因此,修改后的表达式为 。
懒惰模式会尽可能少地匹配,因此它将匹配所有 之间的文本。然后,你可以使用 replaceallstring 函数替换所有匹配项。
以下是修改后的代码:
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)
}使用懒惰模式后,输出将为:
这是#####比较#####的#####
通过将正则表达式修改为懒惰模式,你可以确保匹配和替换所有符合正则表达式的地方。










