Maison > développement back-end > Golang > Comment trouver efficacement toutes les correspondances Regex dans une chaîne Go ?

Comment trouver efficacement toutes les correspondances Regex dans une chaîne Go ?

Barbara Streisand
Libérer: 2024-12-21 09:32:21
original
462 Les gens l'ont consulté

How to Efficiently Find All Regex Matches in a Go String?

Trouver des correspondances avec Regex dans Go

Lorsque vous travaillez avec Go, vous pouvez rencontrer le besoin de faire correspondre des modèles spécifiques dans des chaînes à l'aide d'expressions régulières. Voici comment y parvenir à l'aide du package regexp :

Question :

Comment puis-je trouver toutes les correspondances pour une expression régulière spécifiée dans une chaîne donnée et les renvoyer sous forme de tableau ?

Exemple :

Considérez la chaîne : "{ville}, {état} {zip}". L'objectif est de renvoyer un tableau contenant toutes les sous-chaînes entourées d'accolades.

Tentative initiale :

En utilisant le package regexp, vous avez peut-être essayé le code suivant :

r := regexp.MustCompile("/({[^}]*})/")
matches := r.FindAllString("{city}, {state} {zip}", -1)
Copier après la connexion

Cependant, ce code renvoie une tranche vide, indiquant qu'aucune correspondance n'a été trouvée. trouvé.

Solution :

Pour résoudre ce problème, envisagez les étapes suivantes :

  1. Supprimez les délimiteurs d'expression régulière inutiles (par exemple, /) .
  2. Utilisez des littéraux de chaîne bruts pour définir des modèles d'expression régulière, ce qui vous permet d'échapper aux métacaractères avec un seul barre oblique inverse.
  3. Supprimez le groupe de capture du modèle regex pour obtenir la chaîne entière correspondante sans les accolades.

Pour toutes les correspondances :

r := regexp.MustCompile(`{[^{}]*}`)
matches := r.FindAllString("{city}, {state} {zip}", -1)
fmt.Println(matches) // Prints: [{city}, {state}, {zip}]
Copier après la connexion

Pour les pièces capturées uniquement :

r := regexp.MustCompile(`{([^{}]*)}`)
matches := r.FindAllStringSubmatch("{city}, {state} {zip}", -1)
for _, v := range matches {
    fmt.Println(v[1]) // Prints: city, state, zip
}
Copier après la connexion

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