Maison > développement back-end > Golang > Comment puis-je trouver efficacement toutes les correspondances de modèles qui se chevauchent dans Go ?

Comment puis-je trouver efficacement toutes les correspondances de modèles qui se chevauchent dans Go ?

Patricia Arquette
Libérer: 2024-12-04 10:04:10
original
889 Les gens l'ont consulté

How Can I Efficiently Find All Overlapping Pattern Matches in Go?

Correspondance de modèles qui se chevauchent dans Golang : un guide complet

La correspondance de modèles qui se chevauchent peut poser un défi dans Go, étant donné les limites du package d'expressions régulières . Cet article explore une approche alternative qui utilise la simplicité et l'efficacité des chaînes.Index pour obtenir efficacement une correspondance de modèles qui se chevauchent.

Le problème :

Étant donné une chaîne et un modèle, tel que "..#..", notre objectif est de trouver toutes les instances du modèle indépendamment de leur chevauchement. La méthode regexp.FindAllStringSubmatchIndex existante capture uniquement les correspondances qui ne se chevauchent pas.

La solution :

Au lieu de nous fier à l'expression rationnelle, nous construisons une solution personnalisée en utilisant strings.Index et un pour loop:

func FindOverlappingPattern(input, pattern string) []int {
    idx := []int{}
    j := 0
    for {
        i := strings.Index(input[j:], pattern)
        if i == -1 {
            break
        }
        fmt.Println(j)
        idx = append(idx, j+i)
        j += i + len(pattern)
    }
    fmt.Println("Indexes:", idx)
    return idx
}
Copier après la connexion

Explication:

Cette fonction recherche de manière itérative le modèle à l'aide de strings.Index dans la partie restante de la chaîne d'entrée. Chaque index positif trouvé est ajouté à la liste des index. La boucle continue jusqu'à ce qu'aucune autre correspondance ne soit trouvée.

Exemple d'utilisation :

input := "...#...#....#.....#..#..#..#......."
pattern := "..#.."
result := FindOverlappingPattern(input, pattern)
// result: [1, 10, 16, 22, 29]
Copier après la connexion

Avantages :

Cette approche est simple et exploite les capacités natives de recherche de chaînes de Go. Il surpasse les solutions basées sur les expressions régulières en termes de simplicité et d'efficacité pour les tâches simples de correspondance de modèles.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal