【发布时间】:2019-12-10 10:14:34
【问题描述】:
我正在尝试在 Go 中编写一个函数,它将 foobar 替换为 foobaz,但前提是 bar 前面有 foo。在我看来,regexp.ReplaceAll 函数和积极的后视(参见https://www.regular-expressions.info/lookaround.html)可以解决这个问题,所以我尝试了以下方法:
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`(?<=foo)bar`)
new := re.ReplaceAll([]byte("foobar"), []byte("baz"))
fmt.Println(string(new))
}
我们的目标是让这个程序打印foobaz,但我却因为正则表达式无法编译而感到恐慌:
panic: regexp: Compile(`(?<=foo)bar`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`
我怎样才能做到这一点?
注意
我尝试过的一件事是用非捕获组替换正则表达式:
re := regexp.MustCompile(`(?:foo)bar`)
但是,我发现程序随后会根据需要打印 baz 而不是 foobaz。
【问题讨论】:
-
这里的正则表达式有什么用?要求“将
foobar替换为foobaz,但前提是bar前面有foo”是相当奇怪的,因为foobar只是一个静态字符串,并且总是会满足该条件。跨度>