Rumah >pembangunan bahagian belakang >Golang >Mengapa `.` Regex Pergi Tidak Padan dengan Baris Baharu Walaupun `s` Ditetapkan kepada Benar?

Mengapa `.` Regex Pergi Tidak Padan dengan Baris Baharu Walaupun `s` Ditetapkan kepada Benar?

Patricia Arquette
Patricia Arquetteasal
2024-10-28 01:52:02753semak imbas

Why Doesn't Go's Regex `.` Match Newlines Even When `s` is Set to True?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn