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

Patricia Arquette
Freigeben: 2024-10-28 01:52:02
Original
667 Leute haben es durchsucht

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
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

Ausgabe

s set to true
not matched
s set to false
matched
Nach dem Login kopieren
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!