首页 > 解决方案 > 当有换行符时,如何在多行上匹配 Golang 正则表达式?

问题描述

package main

import (
    "fmt"
    "regexp"
)

func main() {
        r, _ := regexp.Compile(`OWASP_CSRFTOKEN:([a-zA-Z0-9\-]+)`)
        str := "OWASP_CSRFTOKEN:A-a-**\n**9-!OWASP_CSRFTOKEN:B-b-8-"
        fmt.Printf("%q\n", r.FindString(str))
}

我正在尝试匹配模式。注意变量\n。由于变量,str我无法匹配模式。OWASP_CSRFTOKEN:([a-zA-Z0-9\-]+)\nstr

我希望匹配的字符串是OWASP_CSRFTOKEN:A-a-9-,但我得到了一个匹配,OWASP_CSRFTOKEN:A-a-因为9-is after\n

标签: regexgo

解决方案


尝试多线模式:

package main

import (
    "fmt"
    "regexp"
)

func main() {
        r, _ := regexp.Compile("(?m)OWASP_CSRFTOKEN:([a-zA-Z0-9*-]+)")
        str := "OWASP_CSRFTOKEN:A-a-**\n**9-!OWASP_CSRFTOKEN:B-b-8-"
        fmt.Printf("%q\n", r.FindString(str))
}

输出:

"OWASP_CSRFTOKEN:A-a-**"
  • 或允许匹配任何字符 - 使用标志\n打开s
package main

import (
    "fmt"
    "regexp"
)

func main() {
        r, _ := regexp.Compile("(?s)OWASP_CSRFTOKEN:([a-zA-Z0-9*\n-]+)")
        str := "OWASP_CSRFTOKEN:A-a-**\n**9-!OWASP_CSRFTOKEN:B-b-8-"
        fmt.Printf("%q\n", r.FindString(str))
}

输出:

"OWASP_CSRFTOKEN:A-a-**\n**9-"

(我也添加*了允许的字符)


推荐阅读