ホームページ >バックエンド開発 >Golang >Go Regex のドット文字がデフォルトで改行と一致しないのはなぜですか?

Go Regex のドット文字がデフォルトで改行と一致しないのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 21:23:021021ブラウズ

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

Go 正規表現: ドット文字と改行のマッチング

Go re2 構文ドキュメントには、ドット文字 (.) が以下を含む任意の文字と一致すると記載されています。 「単一行」モードが有効な場合は改行。ただし、単純なプログラムでは、デフォルトではドット文字が改行と一致しないことがわかります。

Program:

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

Result:

false

出力は、テキストに改行で区切られた「foo」と「bar」が含まれている場合でも、パターンはテキストと一致しません。

Reason

他の多くの正規表現エンジンと同様に、 Go のドット文字はデフォルトでは改行と一致しません。改行一致を有効にするには、「ドット オール」フラグ (?s) を正規表現に追加する必要があります:

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

「ドット オール」フラグを有効にすると、正規表現は期待どおりにテキストと一致します:

true

したがって、Go 正規表現で改行を含む任意の文字と一致するには、「ドットオール」フラグ (?s) を使用する必要があります。

以上がGo Regex のドット文字がデフォルトで改行と一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。