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!