Heim >Backend-Entwicklung >Golang >Warum stimmt Gos Regex „.' nicht mit Zeilenumbrüchen überein, selbst wenn „s' auf „True' gesetzt ist?

Warum stimmt Gos Regex „.' nicht mit Zeilenumbrüchen überein, selbst wenn „s' auf „True' gesetzt ist?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-28 01:52:02754Durchsuche

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

Go Regexp vs. Newline: Ein subtiler Unterschied

Obwohl in der re2-Syntaxdokumentation von Go angegeben ist, dass jedes Zeichen (.) mit jedem Zeichen übereinstimmt, einschließlich Zeilenumbrüchen, wenn 's' auf true gesetzt ist, zeigt ein einfaches Programm, dass dies nicht der Fall ist.

Programmausgabe

s set to true
not matched
s set to false
matched

Erklärung

Wie bei vielen anderen Regex-Engines stimmt das Punktzeichen (.) nur mit regulären Zeichen überein. Um Zeilenumbrüche in die Übereinstimmung einzubeziehen, muss der Regex das Flag „Punkt alle“ (?s) hinzugefügt werden.

Beispiel

<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>

Ausgabe

s set to true
not matched
s set to false
matched

Um Zeilenumbrüche mit Go-Regexp abzugleichen, ist es daher wichtig, das „Punkt alle“-Flag (?s) in das Regex-Muster aufzunehmen.

Das obige ist der detaillierte Inhalt vonWarum stimmt Gos Regex „.' nicht mit Zeilenumbrüchen überein, selbst wenn „s' auf „True' gesetzt ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn