Go Regex: Dot Character and Newline Matching
Dokumentasi sintaks Go re2 menyatakan bahawa aksara titik (.) sepadan dengan mana-mana aksara, termasuk baris baharu apabila mod "baris tunggal" didayakan. Walau bagaimanapun, program mudah mendedahkan bahawa aksara titik tidak sepadan dengan baris baharu secara lalai.
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>
Keputusan:
false
Output menunjukkan bahawa corak tidak sepadan dengan teks, walaupun teks mengandungi "foo" dan "bar" dipisahkan oleh baris baharu.
Sebab
Seperti kebanyakan enjin regex lain, aksara titik dalam Go tidak sepadan dengan baris baharu secara lalai. Untuk mendayakan padanan baris baharu, bendera "titik semua" (?s) mesti ditambahkan pada regex:
<code class="go">pattern := `foo.*?sbar`</code>
Dengan bendera "titik semua" didayakan, regex akan sepadan dengan teks seperti yang dijangkakan:
true
Oleh itu, untuk memadankan mana-mana aksara, termasuk baris baharu, dalam Go regexp, bendera "titik semua" (?s) mesti digunakan.
Atas ialah kandungan terperinci Mengapa Watak Dot Go Regex Tidak Memadankan Baris Baharu Secara Lalai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!