Rumah >pembangunan bahagian belakang >Golang >Mengapa `.` Regex Pergi Tidak Padan dengan Baris Baharu Walaupun `s` Ditetapkan kepada Benar?
Go Regexp vs. Newline: Satu Perbezaan Halus
Walaupun dokumentasi sintaks re2 Go menyatakan bahawa sebarang aksara (.) sepadan dengan mana-mana aksara, termasuk baris baharu apabila 's' ditetapkan kepada benar, program mudah mendedahkan bahawa ini tidak berlaku.
Output Program
s set to true not matched s set to false matched
Penjelasan
Seperti kebanyakan enjin regex lain, aksara titik (.) hanya sepadan dengan aksara biasa. Untuk memasukkan baris baharu dalam perlawanan, bendera "titik semua" (?s) mesti ditambahkan pada regex.
Contoh
<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>
Output
s set to true not matched s set to false matched
Oleh itu, untuk memadankan baris baharu dengan Go regexp, adalah penting untuk memasukkan bendera "titik semua" (?s) dalam corak regex.
Atas ialah kandungan terperinci Mengapa `.` Regex Pergi Tidak Padan dengan Baris Baharu Walaupun `s` Ditetapkan kepada Benar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!