"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment faire correspondre les caractères répétitifs dans Go sans références arrière ?

Comment faire correspondre les caractères répétitifs dans Go sans références arrière ?

Publié le 2024-11-19
Parcourir:857

How to Match Repeating Characters in Go Without Backreferences?

Comment faire correspondre n'importe quel caractère répétitif à l'aide d'expressions régulières dans Go ?

Dans cet article, nous aborderons le défi de faire correspondre n'importe quel caractère qui se répète deux fois en utilisant des expressions régulières dans Go. Cette tâche est souvent simple dans d'autres syntaxes regex, telles que JavaScript, où l'on peut simplement utiliser une référence arrière pour faire correspondre les caractères répétitifs. Cependant, le moteur d'expression régulière natif de Go (re2) ne prend pas en charge la référence arrière.

Impossible d'utiliser la référence arrière dans le re2 de Go

L'exemple JavaScript fourni exploite la référence arrière pour capturer caractères répétitifs :

var str = "abccdeff";
var r = /([a-z]{1})\1/g
console.log(str.match(r))

Ce modèle échouerait dans le re2 de Go en raison du manque de prise en charge des références arrière.

Alternatives au re2 de Go

Pour résoudre cette limitation, envisagez ces alternatives :

  • Utilisez une bibliothèque d'expressions régulières compatible : Les bibliothèques comme glenn-brown/golang-pkg-pcre offrent des fonctionnalités avancées, notamment référence arrière et sont compatibles avec la syntaxe de Go.
  • Implémentez une boucle personnalisée : Développez une solution basée sur une boucle qui analyse manuellement les caractères pour la répétition sans compter sur les expressions régulières.

Exemple de solution de boucle personnalisée

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "abccdeff"

    // Find and print repeating characters without using regex
    for i, ch := range str {
        if i 1 
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3