Regex 当有新行字符时,如何在多行上匹配Golang正则表达式?

Regex 当有新行字符时,如何在多行上匹配Golang正则表达式?,regex,go,Regex,Go,我正在尝试匹配一种模式。注意\n变量中的str。 由于str变量中的\n,我无法匹配模式OWASP\u CSRFTOKEN:([a-zA-Z0-9\-]+) 我希望匹配的字符串是OWASP\u CSRFTOKEN:A-A-9-,但我得到了OWASP\u CSRFTOKEN:A-A-的匹配,因为9-在\n之后,请尝试多行模式: -打开我的m标志 输出: package main import ( "fmt" "regexp" ) fu

我正在尝试匹配一种模式。注意
\n
变量中的
str
。 由于
str
变量中的
\n
,我无法匹配模式
OWASP\u CSRFTOKEN:([a-zA-Z0-9\-]+)

我希望匹配的字符串是
OWASP\u CSRFTOKEN:A-A-9-
,但我得到了
OWASP\u CSRFTOKEN:A-A-
的匹配,因为
9-
\n
之后,请尝试多行模式:

  • -打开我的
    m
    标志
输出:

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))
}
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))
}
  • 或允许
    \n
    与任何字符匹配-使用
    s
    标志启用
输出:

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))
}
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))
}

(我还将
*
添加为允许的字符)

\n
添加到字符类中,
OWASP\U CSRFTOKEN:([a-zA-Z0-9\n-]+)
。或者,在运行正则表达式之前删除所有
\n
(如果需要不带换行符的值,请参阅),这可能会更简单。
"OWASP_CSRFTOKEN:A-a-**\n**9-"