Maison > développement back-end > Golang > Comment pouvons-nous trouver efficacement toutes les correspondances de modèles qui se chevauchent dans une chaîne Go ?

Comment pouvons-nous trouver efficacement toutes les correspondances de modèles qui se chevauchent dans une chaîne Go ?

Barbara Streisand
Libérer: 2024-12-06 19:30:14
original
943 Les gens l'ont consulté

How Can We Efficiently Find All Overlapping Pattern Matches in a Go String?

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)
}
Copier après la connexion

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]
Copier après la connexion

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!

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