Maison  >  Article  >  développement back-end  >  Go Regexp : le caractère point correspond-il à la nouvelle ligne par défaut ?

Go Regexp : le caractère point correspond-il à la nouvelle ligne par défaut ?

DDD
DDDoriginal
2024-10-27 05:38:03736parcourir

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

Go Regexp : un caractère correspond-il à la nouvelle ligne ?

Malgré la déclaration de la documentation selon laquelle n'importe quel caractère (.) dans la syntaxe re2 de Go correspond à n'importe quel caractère, y compris la nouvelle ligne (s=true), certains cas indiquent le contraire. Par exemple, le programme suivant démontre que le caractère any ne correspond pas à la nouvelle ligne :

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

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

Solution : Dot All Flag

Pour résoudre ce problème, le package d'expression rationnelle de Go fournit le drapeau "pointer tout" (?s). Lorsqu'il est ajouté à une expression régulière, cet indicateur permet au caractère point (.) de correspondre aux nouvelles lignes.

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

Avec l'indicateur (?s), n'importe quel caractère (.) correspond désormais aux caractères de nouvelle ligne. Cela correspond au comportement de la plupart des autres moteurs d'expressions régulières, qui ne correspondent généralement pas aux nouvelles lignes par défaut.

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