Heim  >  Artikel  >  Backend-Entwicklung  >  Go Regexp: Entspricht das Punktzeichen standardmäßig Newline?

Go Regexp: Entspricht das Punktzeichen standardmäßig Newline?

DDD
DDDOriginal
2024-10-27 05:38:03736Durchsuche

Go Regexp: Does the Dot Character Match Newline by Default?

Go Regexp: Passt irgendein Zeichen zu Newline?

Trotz der Aussage in der Dokumentation, dass das beliebige Zeichen (.) in der re2-Syntax von Go mit jedem übereinstimmt Zeichen, einschließlich Zeilenumbruch (s=true), weisen bestimmte Fälle auf etwas anderes hin. Das folgende Programm zeigt beispielsweise, dass das beliebige Zeichen nicht mit Newline übereinstimmt:

<code class="go">import "regexp"

func main() {
    str := "hello\nworld"
    match, _ := regexp.MatchString(".*", str)
    println(match) // false
}</code>

Lösung: Dot All Flag

Um dieses Problem zu beheben, verwenden Sie das Regexp-Paket von Go stellt das Flag „Punkt alle“ (?s) bereit. Beim Hinzufügen zu einem regulären Ausdruck ermöglicht dieses Flag, dass das Punktzeichen (.) mit Zeilenumbrüchen übereinstimmt.

<code class="go">func main() {
    str := "hello\nworld"
    match, _ := regexp.MatchString("(?s).*", str)
    println(match) // true
}</code>

Mit dem Flag (?s) stimmt das beliebige Zeichen (.) jetzt mit Zeilenumbrüchen überein. Dies stimmt mit dem Verhalten der meisten anderen Regex-Engines überein, die normalerweise standardmäßig keine Zeilenumbrüche berücksichtigen.

Das obige ist der detaillierte Inhalt vonGo Regexp: Entspricht das Punktzeichen standardmäßig Newline?. 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