为什么以下多行正则表达式不起作用,我希望匹配标签内的子字符串。其他简单的多行匹配工作正常。

func main() {
    r := regexp.MustCompile(`(?m)<think>(.*)</think>`)
    const s = `That is
    <think>
    FOOBAR
    </think>`
    fmt.Printf("%#v\n", r.FindStringSubmatch(s))
}

https://play.golang.org/p/8C6u_0ca8w

最佳答案

默认情况下, ”。”不匹配换行符。如果你给“s”标志,它会。我认为你不需要“m”。

请注意,如果您的字符串中有多个 <think>...</think>,则正则表达式将匹配第一个 <think> 和最后一个 </think> 之间的所有内容。使用 .*? 将导致它只匹配第一个的内容。

关于regex - Golang 多行正则表达式不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37106834/

10-12 23:08