ホームページ  >  記事  >  バックエンド開発  >  `s` が True に設定されている場合でも、Go の正規表現 `.` が改行と一致しないのはなぜですか?

`s` が True に設定されている場合でも、Go の正規表現 `.` が改行と一致しないのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-28 01:52:02659ブラウズ

Why Doesn't Go's Regex `.` Match Newlines Even When `s` is Set to True?

Go 正規表現と改行: 微妙な区別

Go の re2 構文ドキュメントには、任意の文字 (.) が任意の文字と一致すると記載されていますが、 「s」が true に設定されている場合に改行を含めると、単純なプログラムでこれが当てはまらないことがわかります。

プログラム出力

s set to true
not matched
s set to false
matched

説明

他の多くの正規表現エンジンと同様、ドット文字 (.) は通常の文字とのみ一致します。一致に改行を含めるには、「ドットオール」フラグ (?s) を正規表現に追加する必要があります。

<code class="go">import (
    "fmt"
    "regexp"
)

func main() {
    const text = "This is a test.\nAnd this is another line."

    // Without the "dot all" flag, newline is not matched.
    r1 := regexp.MustCompile(".+")
    fmt.Printf("s set to true\n")
    if !r1.MatchString(text) {
        fmt.Println("not matched")
    }

    // With the "dot all" flag, newline is matched.
    r2 := regexp.MustCompile("(?s).+")
    fmt.Printf("s set to false\n")
    if r2.MatchString(text) {
        fmt.Println("matched")
    }
}</code>

出力

s set to true
not matched
s set to false
matched

したがって、改行を Go 正規表現と一致させるには、正規表現パターンに「ドットオール」フラグ (?s) を含める必要があります。

以上が`s` が True に設定されている場合でも、Go の正規表現 `.` が改行と一致しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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