为了账号安全,请及时绑定邮箱和手机立即绑定

Golang多行正则表达式不起作用

Golang多行正则表达式不起作用

Go
临摹微笑 2022-01-10 14:31:35
为什么以下多行正则表达式不起作用,我希望匹配标签内的子字符串。其他简单的多行匹配工作正常。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
查看完整描述

2 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

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

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


查看完整回答
反对 回复 2022-01-10
?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

不要使用正则表达式来解析 XML,而是使用encoding/xml。在正则表达式中无法处理的极端情况示例:<think><elem attrib="I'm pondering about </think> tag now"></elem></think>


我将使用STARTandSTOP作为标记,只是为了与任何 XML 内容分离。完整的示例(包括 LF 和 CRLF 行结尾,以防万一)与Go Playground的链接:


package main


import (

    "fmt"

    "regexp"

)


func main() {

    r := regexp.MustCompile(`(?s)START(.*?)STOP`)

    const s = "That is \nSTART\nFOOBAR\r\n\r\nSTOP\n"

    fmt.Printf("%#v\n", r.FindStringSubmatch(s))

}

返回:


[]string{"START\nFOOBAR\r\n\r\nSTOP", "\nFOOBAR\r\n\r\n"}



查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 316 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信