Maison  >  Article  >  développement back-end  >  Pourquoi le caractère point de Go Regex ne correspond-il pas aux nouvelles lignes par défaut ?

Pourquoi le caractère point de Go Regex ne correspond-il pas aux nouvelles lignes par défaut ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 21:23:02875parcourir

Why Doesn't Go Regex's Dot Character Match Newlines By Default?

Go Regex : correspondance des caractères de point et de nouvelle ligne

La documentation sur la syntaxe Go re2 indique que le caractère point (.) correspond à n'importe quel caractère, y compris les sauts de ligne lorsque le(s) mode(s) "simple ligne" sont activés. Cependant, un programme simple révèle que le caractère point ne correspond pas aux nouvelles lignes par défaut.

Programme :

<code class="go">package main

import (
    "fmt"
    "regexp"
)

func main() {
    text := "foo\nbar\nbaz"
    pattern := `foo.*bar`

    matched, err := regexp.MatchString(pattern, text)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Println(matched)
}</code>

Résultat :

false

La sortie montre que le Le modèle ne correspond pas au texte, même si le texte contient "foo" et "bar" séparés par une nouvelle ligne.

Raison

Comme beaucoup d'autres moteurs d'expressions régulières, le le caractère point dans Go ne correspond pas aux nouvelles lignes par défaut. Pour activer la correspondance de nouvelle ligne, l'indicateur "pointer tout" (?s) doit être ajouté à l'expression régulière :

<code class="go">pattern := `foo.*?sbar`</code>

Avec l'indicateur "pointer tout" activé, l'expression régulière correspondra au texte comme prévu :

true

Par conséquent, pour faire correspondre n'importe quel caractère, y compris les nouvelles lignes, dans l'expression rationnelle Go, le drapeau "pointer tout" (?s) doit être utilisé.

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!

Déclaration:
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