Go 正則表達式:點字符和換行符匹配
Go re2 語法文檔指出點字符(.) 匹配任何字符,包括啟用“單行”模式時換行。然而,一個簡單的程式顯示點字元預設不匹配換行符。
程式:
<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>
結果:
false
輸出顯示模式與文字不匹配,即使文字包含由換行符分隔的「foo」和「bar 」。
原因
與許多其他正規表示式引擎一樣, Go 中的點字元預設不符換行符。若要啟用換行符匹配,必須將「dot all」標誌(?s) 新增至正規表示式:
<code class="go">pattern := `foo.*?sbar`</code>
啟用「dot all」標誌後,正規表示式將按預期匹配文字:
true
因此,要在Go 正規表示式中符合任何字元(包括換行符),必須使用「dot all」標誌(?s)。
以上是為什麼 Go Regex 的點字元預設不匹配換行符?的詳細內容。更多資訊請關注PHP中文網其他相關文章!