Maison >développement back-end >Golang >Comment simuler des groupes de capture nommés dans les expressions régulières Go ?

Comment simuler des groupes de capture nommés dans les expressions régulières Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-19 11:08:17482parcourir

How to Simulate Named Capturing Groups in Go Regular Expressions?

Comment émuler la capture de groupes dans les expressions régulières Go

Contrairement à Ruby et Java, qui utilisent des expressions régulières compatibles PCRE qui prennent en charge la capture groupes, Go utilise la bibliothèque RE2 de Google, qui ne propose pas nativement cette fonctionnalité. Cet article explique comment obtenir un effet similaire dans Go.

Considérez l'expression régulière Ruby suivante avec des groupes de capture :

(?<Year>\d{4})-(?<Month>\d{2})-(?<Day>\d{2})

Ce modèle correspond à des chaînes de date telles que "2001-01-20". et capture les valeurs de l'année, du mois et du jour dans des groupes nommés accessibles via leurs noms, tels que ["Année"].

Pour émuler ce comportement dans Go, le préfixe « P » doit être ajouté pour capturer les noms de groupe :

(?P<Year>\d{4})-(?P<Month>\d{2})-(?P<Day>\d{2})

Par exemple, le code Go suivant montre comment utiliser ce modèle modifié :

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

La fonction FindStringSubmatch renvoie les groupes capturés, tandis que SubexpNames fournit les noms des groupes de capture, vous permettant d'accéder à leurs valeurs.

En ajoutant le préfixe "P" pour capturer le groupe noms et en tirant parti de la fonction SubexpNames, il est possible d'émuler la fonctionnalité de capture de groupes dans les expressions régulières Ruby lorsque vous travaillez avec la bibliothèque RE2 de Go.

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