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