「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go 正規表現の「.」は改行と一致しますか?任意の文字一致の予期しない動作。

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

2024 年 11 月 4 日に公開
ブラウズ:991

 Does Go Regexp\'s \

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

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

プログラム結果が予期せません

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

不一致への対処

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

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

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

package main

import (
    "fmt"
    "regexp"
)

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

このプログラムを実行すると、「abc\ndef」が正しく出力され、任意の文字が期待どおりに改行に一致することがわかります。

結論

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3