Rumah > pembangunan bahagian belakang > Golang > Mengapa Watak Dot Go Regex Tidak Memadankan Baris Baharu Secara Lalai?

Mengapa Watak Dot Go Regex Tidak Memadankan Baris Baharu Secara Lalai?

Mary-Kate Olsen
Lepaskan: 2024-10-27 21:23:02
asal
1008 orang telah melayarinya

Why Doesn't Go Regex's Dot Character Match Newlines By Default?

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

Keputusan:

false
Salin selepas log masuk

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

Dengan bendera "titik semua" didayakan, regex akan sepadan dengan teks seperti yang dijangkakan:

true
Salin selepas log masuk

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!

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