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
Mary-Kate Olsenoriginal
2024-12-18 18:14:12803parcourir

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())
}

Ce code afficherait :

[]string{"2015", "05", "27"}
[]string{""}

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!

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