Maison > développement back-end > Golang > Comment répliquer la fonctionnalité de groupe de capture de Ruby dans Go Regex ?

Comment répliquer la fonctionnalité de groupe de capture de Ruby dans Go Regex ?

Mary-Kate Olsen
Libérer: 2024-12-18 18:14:12
original
796 Les gens l'ont consulté

How to Replicate Ruby's Capturing Group Functionality in Go Regex?

Comment émuler la fonctionnalité de groupe de capture Ruby dans Go Regex

Lors de la transition du code de Ruby vers Go, la compatibilité des expressions régulières peut être un défi. Ruby utilise PCRE, tandis que Go utilise RE2 de Google, ce qui oblige les développeurs à adapter leurs expressions.

Plus précisément, capturer la fonctionnalité de groupe, qui permet d'extraire des données spécifiques à partir de modèles correspondants, présente un défi. Pour répliquer cette fonctionnalité dans Go, les étapes suivantes peuvent être suivies :

  1. Utiliser des groupes de capture nommés :
    Remplacer les crochets utilisés dans les groupes de capture Ruby par la syntaxe (? P suivi du modèle. Par exemple, (?d{4}) devient. (?Pd{4}).
  2. Noms des groupes de références croisées :
    Appelez la méthode SubexpNames() sur l'expression régulière compilée pour obtenir une liste des captures noms de groupes. Ces informations seront utilisées ultérieurement pour extraire les données capturées.
  3. Extraction à l'aide du groupe. Noms :
    Pour récupérer les données d'un groupe spécifique, utilisez la syntaxe r.FindStringSubmatch(s)[groupName], où r est l'expression régulière compilée, s est la chaîne d'entrée et groupName est le nom de le groupe souhaité.

Par exemple, pour extraire l'année d'une chaîne de date à l'aide de l'expression régulière (?Pd{4})-(?Pd{2})-(?Pd{2}), vous utiliseriez le code suivant :

package main

import (
    "fmt"
    "regexp"
)

func main() {
    r := regexp.MustCompile(`(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})`)
    fmt.Printf("%#v\n", r.FindStringSubmatch(`2015-05-27`))
    fmt.Printf("%#v\n", r.SubexpNames())
}
Copier après la connexion

Ce code afficherait :

[]string{"2015", "05", "27"}
[]string{""}
Copier après la connexion

La première ligne affiche les valeurs capturées dans l'ordre, tandis que la deuxième ligne affiche les noms des groupes de capture. En utilisant ces techniques, vous pouvez obtenir une fonctionnalité de groupe de capture similaire dans Go comme dans Ruby.

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