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!