Maison  >  Article  >  développement back-end  >  Tutoriel avancé sur les expressions régulières dans le langage Go : comment utiliser les références arrière

Tutoriel avancé sur les expressions régulières dans le langage Go : comment utiliser les références arrière

WBOY
WBOYoriginal
2023-07-12 09:27:25950parcourir

Tutoriel avancé sur les expressions régulières Go Language : Comment utiliser les références arrière

Introduction :
L'expression régulière est un puissant outil de correspondance de chaînes et constitue l'une des compétences nécessaires pour les développeurs qui doivent traiter du texte. Le package standard du langage Go fournit une multitude de fonctions, y compris des références arrière. Cet article explique comment utiliser les références arrière pour la correspondance avancée d'expressions régulières.

1. Le concept de référence arrière :
La référence arrière fait référence à l'utilisation d'une chaîne déjà correspondante dans une expression régulière dans le cadre d'une correspondance ultérieure. En utilisant des références arrière, nous pouvons faire correspondre plus précisément des modèles complexes, comme la correspondance de mots ou de balises répétés.

2. Syntaxe d'utilisation des références arrière :
Dans les expressions régulières du langage Go, utilisez le symbole $ suivi d'un nombre pour représenter une référence arrière. Le soi-disant « numéro » fait référence au numéro de série du groupe de capture dans l'expression régulière précédente.

Exemple 1 :
Supposons que nous ayons une liste de chaînes et que nous devions y trouver les mêmes mots consécutifs.

package main

import (

"fmt"
"regexp"

)

func main() {

str := "hello hello world world world"

re := regexp.MustCompile(`(w+)s+`)
matches := re.FindAllStringSubmatch(str, -1)

for _, match := range matches {
    fmt.Println(match[0])
}

}

Résultat de sortie :
hello hello
world world world

Dans cet exemple, nous avons utilisé des expressions régulières( w+ )s+ . Parmi eux, ( w+ ) représente un mot, s+ représente un ou plusieurs espaces et représente une référence arrière au groupe de capture précédent. c'est-à-dire le mot correspondant. (w+)s+。其中,(w+)表示一个单词,s+表示一个或多个空格,表示反向引用前面的捕获组,即匹配到的单词。

示例2:
假设我们有一个HTML字符串,需要匹配其中重复的标签。

package main

import (

"fmt"
"regexp"

)

func main() {

html := "<h1>标题</h1><h2>副标题</h2><h1>另一个标题</h1><h2>另一个副标题</h2>"

re := regexp.MustCompile(`<h(d)>(.*?)</h>`)
matches := re.FindAllStringSubmatch(html, -1)

for _, match := range matches {
    fmt.Println(match[0])
}

}

输出结果:
4a249f0d628e2318394fd9b75b4636b1标题473f0a7621bec819994bb5020d29372a
c1a436a314ed609750bd7c7d319db4da副标题2e9b454fa8428549ca2e64dfac4625cd
4a249f0d628e2318394fd9b75b4636b1另一个标题473f0a7621bec819994bb5020d29372a
c1a436a314ed609750bd7c7d319db4da另一个副标题2e9b454fa8428549ca2e64dfac4625cd

在这个例子中,我们使用了正则表达式4238498ac8cd3c608e196fe41a474f88(.*?)7f9de5593b389930cbdda4720ecb089f。其中,4238498ac8cd3c608e196fe41a474f88表示匹配4a249f0d628e2318394fd9b75b4636b1c1a436a314ed609750bd7c7d319db4da标签,(.*?)表示非贪婪模式匹配标签内容,7f9de5593b389930cbdda4720ecb089f表示匹配473f0a7621bec819994bb5020d29372a2e9b454fa8428549ca2e64dfac4625cd闭合标签,

Exemple 2 :

Supposons que nous ayons une chaîne HTML et que nous devions y faire correspondre des balises répétées.

package main🎜🎜import (🎜rrreee🎜)🎜🎜func main() {🎜rrreee🎜}🎜🎜Résultat de sortie : 🎜4a249f0d628e2318394fd9b75b4636b1Titre473f0a7621bec819994bb5020d29372a🎜c1a436a314ed609750bd7c7d319db4daSous-titre6b0edfaa0e333a4fa8d9d5b4e3c00bceUn autre titre473f0a7621bec819994bb5020d29372a🎜c1a436a314ed609750bd7c7d319db4daUn autre sous-titre2e9b454fa8428549ca2e64dfac4625cd🎜🎜Dans cet exemple, nous avons utilisé l'expression régulière 4238498ac8cd3c608e196fe41a474f88 h>. Parmi eux, 4238498ac8cd3c608e196fe41a474f88 signifie correspondre à la balise 4a249f0d628e2318394fd9b75b4636b1 ou c1a436a314ed609750bd7c7d319db4da, (. * ?) signifie une correspondance en mode non gourmand avec le contenu de la balise, 991220c0dd17f19e1035a145897fbd44 signifie une correspondance avec 473f0a7621bec819994bb5020d29372a ou </ h2&gt ; ferme la balise, indique une référence arrière au groupe de capture précédent, c'est-à-dire le type de balise correspondant. 🎜🎜Conclusion : 🎜Backreference est une fonctionnalité puissante dans les expressions régulières du langage Go, qui peut obtenir une correspondance de modèles plus précise. Pour des scénarios tels que le traitement de texte complexe ou de chaînes HTML, les références arrière peuvent constituer une solution pratique. Cependant, lorsque vous utilisez des références arrière, vous devez faire attention à l'ordre des groupes de capture et à la syntaxe standardisée des expressions régulières pour obtenir des résultats de correspondance précis. J'espère que cet article pourra aider les lecteurs à pleinement comprendre et appliquer les références antérieures et à améliorer leurs compétences en matière d'utilisation des expressions régulières. 🎜

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