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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!