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
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>
Sortie
s set to true not matched s set to false matched
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!