首頁 > 後端開發 > Golang > 主體

為什麼 Go Regex 的點字元預設不匹配換行符?

Mary-Kate Olsen
發布: 2024-10-27 21:23:02
原創
889 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!