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
Mary-Kate Olsenasal
2024-10-27 21:23:021023semak imbas

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>

Keputusan:

false

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>

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

true

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!

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