Maison >développement back-end >Golang >Comment puis-je trouver efficacement des correspondances qui se chevauchent dans une chaîne à l'aide de Go ?

Comment puis-je trouver efficacement des correspondances qui se chevauchent dans une chaîne à l'aide de Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-22 03:55:11187parcourir

How Can I Efficiently Find Overlapping Matches in a String Using Go?

Correspondance de modèles avec chevauchement dans Golang : une solution simple

Bien que le package d'expressions rationnelles de Go offre des fonctionnalités robustes pour la correspondance de modèles, il manque nativement de prise en charge du chevauchement matchs. Pour résoudre ce problème, une approche simple et efficace utilisant la fonction strings.Index offre une solution plus adaptée.

Considérez le code suivant :

input := "...#...#....#.....#..#..#..#......."
idx := []int{}
j := 0
for {
    i := strings.Index(input[j:], "..#..")
    if i == -1 {
        break
    }
    fmt.Println(j)
    idx = append(idx, j+i)
    j += i+1
}
fmt.Println("Indexes:", idx)

Dans cet extrait, l'entrée variable stocke le chaîne cible. Nous initialisons une tranche vide d'entiers nommée idx pour stocker les indices de départ des correspondances de modèles dans la chaîne d'entrée. La variable j garde une trace de la position actuelle dans la recherche.

Le cœur de la solution réside dans la boucle for. Nous appelons à plusieurs reprises strings.Index pour rechercher le modèle ".#.." La valeur renvoyée i représente la première occurrence du modèle à partir de l'index j. Si i n'est pas -1, nous avons trouvé une correspondance et enregistrons son index de départ (j i) dans la tranche idx. Nous incrémentons ensuite j de i 1 pour déplacer la recherche vers le caractère suivant la correspondance.

La boucle continue ce processus jusqu'à ce qu'il n'y ait plus de correspondances trouvées. Nous obtenons ensuite la liste des indices de départ pour toutes les correspondances qui se chevauchent de ".#.." dans la chaîne d'entrée.

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