Correspondance de modèles qui se chevauchent dans Go
Dans Go, l'utilisation d'expressions régulières pour faire correspondre des modèles qui se chevauchent peut être difficile. La méthode FindAllStringSubmatchIndex, bien qu'utile pour les correspondances qui ne se chevauchent pas, ne suffit pas lorsqu'il s'agit de modèles qui se chevauchent.
Une approche alternative
Au lieu de s'appuyer uniquement sur des expressions régulières, nous pouvons utiliser une solution plus simple et plus efficace en utilisant la fonction strings.Index et une boucle for. Cette approche offre un moyen simple d'identifier toutes les occurrences d'un motif qui se chevauche, quelle que soit sa position dans la chaîne d'entrée.
Exemple de code
L'extrait de code suivant le démontre approche alternative :
import ( "fmt" "strings" ) func main() { input := "...#...#....#.....#..#..#..#......." idx := []int{} j := 0 for { i := strings.Index(input[j:], "..#..") if i == -1 { break } idx = append(idx, j+i) j += i + 1 } fmt.Println("Indexes:", idx) }
Dans ce code, la fonction Index est utilisée pour rechercher le modèle "..#.." dans la chaîne d'entrée à partir de la position 'j'. Lorsqu'une correspondance est trouvée, l'index de la position correspondante est ajouté à la tranche idx et « j » est incrémenté de « i 1 » pour déplacer la recherche vers le caractère suivant après la correspondance.
Résultats
Une fois exécuté, le code imprime la sortie suivante :
1 10 16 22 Indexes: [1 10 16 22]
Cette sortie identifie correctement tous occurrences superposées du modèle "..#.." dans la chaîne d'entrée.
Conclusion
Alors que les expressions régulières peuvent être un outil puissant pour la correspondance de modèles dans de nombreux scénarios , ils ne constituent peut-être pas l’option la plus appropriée dans les cas impliquant des modèles qui se chevauchent. En tirant parti de la simplicité et de l'efficacité des opérations sur les chaînes, nous pouvons résoudre efficacement de tels problèmes sans les complexités de l'analyse des expressions régulières.
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!