首页  >  文章  >  后端开发  >  为什么 Go Regex 的点字符默认不匹配换行符?

为什么 Go Regex 的点字符默认不匹配换行符?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-27 21:23:02875浏览

Why Doesn't Go Regex's Dot Character Match Newlines By Default?

Go 正则表达式:点字符和换行符匹配

Go re2 语法文档指出点字符 (.) 匹配任何字符,包括当启用“单行”模式时换行。然而,一个简单的程序显示点字符默认不匹配换行符。

程序:

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "foo\nbar\nbaz"
    pattern := `foo.*bar`

    matched, err := regexp.MatchString(pattern, text)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(matched)
}</code>

结果:

false

输出显示模式与文本不匹配,即使文本包含由换行符分隔的“foo”和“bar”。

原因

与许多其他正则表达式引擎一样, Go 中的点字符默认不匹配换行符。要启用换行符匹配,必须将“dot all”标志 (?s) 添加到正则表达式中:

<code class="go">pattern := `foo.*?sbar`</code>

启用“dot all”标志后,正则表达式将按预期匹配文本:

true

因此,要在 Go 正则表达式中匹配任何字符(包括换行符),必须使用“dot all”标志 (?s)。

以上是为什么 Go Regex 的点字符默认不匹配换行符?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn