Go Regexp: Memahami Sebarang Padanan Aksara
Dokumen sintaks Go re2 menyatakan bahawa sebarang aksara (.) sepadan dengan mana-mana aksara, termasuk baris baharu apabila bendera "s" ditetapkan. Walau bagaimanapun, pertanyaan baru-baru ini menimbulkan kebimbangan kerana program ujian nampaknya menunjukkan sebaliknya.
Keputusan Program Tidak Dijangka
Program yang disediakan (http://play.golang.org /p/pccP52RvKS) bertujuan untuk memadankan semua aksara, termasuk baris baharu, tetapi keputusannya menunjukkan mana-mana aksara tidak sepadan dengan baris baharu.
Menangani Percanggahan
Seperti kebanyakan yang lain regex, Go's re2 tidak sepadan dengan baris baharu dengan "." metacharacter secara lalai. Untuk mendayakan padanan baris baharu, bendera "?s" (titik semua) mesti ditambahkan pada regex.
Contoh dengan Bendera "?s"
Versi yang diubah suai program ujian yang menggabungkan bendera "?s":
<code class="go">package main import ( "fmt" "regexp" ) func main() { re := regexp.MustCompile("(?s).+") match := re.FindString("abc\ndef") fmt.Println(match) }</code>
Apabila dilaksanakan, program ini mencetak "abcndef" dengan betul, menunjukkan bahawa mana-mana aksara kini sepadan dengan baris baharu seperti yang dijangkakan.
Kesimpulan
Dalam sintaks re2 Go, "." metacharacter sememangnya tidak sepadan dengan baris baharu. Untuk mendayakan padanan baris baharu, bendera "?s" mesti ditambahkan pada regex. Dengan memasukkan bendera ini, pengguna boleh memastikan gelagat padanan yang tepat yang sejajar dengan dokumentasi sintaks re2.
Atas ialah kandungan terperinci Adakah \'.\' Go Regexp Padan dengan Baris Baharu? Kelakuan Tidak Dijangka Mana-mana Padanan Watak.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!