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