Maison > développement back-end > Golang > le corps du texte

Pourquoi l'expression régulière `.` de Go ne correspond-elle pas aux nouvelles lignes même lorsque `s` est défini sur True ?

Patricia Arquette
Libérer: 2024-10-28 01:52:02
original
667 Les gens l'ont consulté

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

Go Regexp vs. Newline : une distinction subtile

Malgré la documentation sur la syntaxe re2 de Go indiquant que n'importe quel caractère (.) correspond à n'importe quel caractère, y compris les nouvelles lignes lorsque 's' est défini sur true, un programme simple révèle que ce n'est pas le cas.

Sortie du programme

s set to true
not matched
s set to false
matched
Copier après la connexion
Copier après la connexion

Explication

Comme beaucoup d'autres moteurs d'expression régulière, le caractère point (.) ne correspond qu'aux caractères normaux. Pour inclure des nouvelles lignes dans la correspondance, le drapeau "pointer tout" (?s) doit être ajouté à l'expression régulière.

Exemple

<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>
Copier après la connexion

Sortie

s set to true
not matched
s set to false
matched
Copier après la connexion
Copier après la connexion

Par conséquent, pour faire correspondre les nouvelles lignes avec l'expression rationnelle Go, il est essentiel d'inclure le drapeau "pointer tout" (?s) dans le modèle d'expression régulière.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!