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

Patricia Arquette
Lepaskan: 2024-10-28 01:52:02
asal
667 orang telah melayarinya

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
Salin selepas log masuk
Salin selepas log masuk

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>
Salin selepas log masuk

Output

s set to true
not matched
s set to false
matched
Salin selepas log masuk
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!