ホームページ >バックエンド開発 >Golang >Go 正規表現の「.」は改行と一致しますか?任意の文字一致の予期しない動作。

Go 正規表現の「.」は改行と一致しますか?任意の文字一致の予期しない動作。

DDD
DDDオリジナル
2024-10-28 11:03:01657ブラウズ

 Does Go Regexp's

Go 正規表現: 任意の文字の一致を理解する

Go re2 構文ドキュメントには、任意の文字 (.) が改行を含む任意の文字と一致すると記載されています「s」フラグが設定されている場合。しかし、最近のクエリでは、テスト プログラムがそうではないことを示しているようだったので懸念が生じました。

予期しないプログラム結果

提供されたプログラム (http://play.golang.org) /p/pccP52RvKS) は、改行を含むすべての文字と一致することを目指していますが、その結果は、どの文字も改行と一致しないことを示しています。

不一致への対処

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

「?s」フラグを使用した例

修正バージョン"?s" フラグを組み込んだテスト プログラムの例:

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    re := regexp.MustCompile("(?s).+")
    match := re.FindString("abc\ndef")
    fmt.Println(match)
}</code>

実行すると、このプログラムは "abcndef" を正しく出力し、任意の文字が期待どおりに改行と一致することを示します。

結論

Go の re2 構文では、「.」メタキャラクターは本質的に改行と一致しません。改行一致を有効にするには、「?s」フラグを正規表現に追加する必要があります。このフラグを組み込むことで、ユーザーは re2 構文ドキュメントに準拠した正確な一致動作を保証できます。

以上がGo 正規表現の「.」は改行と一致しますか?任意の文字一致の予期しない動作。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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