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