Maison  >  Article  >  développement back-end  >  Tutoriel avancé sur les expressions régulières en langage Go : Comment utiliser les conditions de pré-recherche

Tutoriel avancé sur les expressions régulières en langage Go : Comment utiliser les conditions de pré-recherche

PHPz
PHPzoriginal
2023-07-12 19:37:411301parcourir

Tutoriel avancé sur les expressions régulières du langage Go : Comment utiliser les conditions de pré-recherche

L'expression régulière est un puissant outil de correspondance de texte dans le langage Go, les expressions régulières peuvent être utilisées pour la correspondance de modèles, le remplacement et l'extraction de chaînes, etc. Dans les didacticiels précédents, nous avons appris quelques syntaxes de base des expressions régulières et des méthodes d'application. Cet article continuera à explorer les techniques avancées d'expressions régulières dans le langage Go, en se concentrant sur la façon d'utiliser les conditions de pré-recherche.

Les conditions de pré-recherche font référence à l'amélioration de l'efficacité de la mise en correspondance en préjugeant si certaines conditions sont remplies au cours du processus de mise en correspondance. Dans les applications pratiques, de nombreux modèles d'expressions régulières contiennent des conditions complexes. L'utilisation de conditions de pré-recherche peut éviter des opérations de correspondance inutiles, améliorant ainsi les performances.

Ci-dessous, nous utilisons plusieurs exemples pour montrer comment utiliser les conditions de pré-recherche.

  1. Correspondance prédictive directe

La correspondance prédictive directe utilise la syntaxe (?=pattern), ce qui signifie faire correspondre les caractères qui répondent aux conditions du modèle, mais ne consomme pas les résultats de correspondance. Par exemple, si nous voulons faire correspondre tous les mots commençant par un nombre dans une chaîne, nous pouvons utiliser la correspondance par prédiction directe pour y parvenir. (?=pattern),表示匹配满足pattern条件的字符,但不消耗匹配结果。例如,我们要匹配一个字符串中的所有以数字开头的单词,可以使用正向预测匹配来实现。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "123abc 456def 789ghi"
    pattern := `w+(?=d)`

    re := regexp.MustCompile(pattern)
    res := re.FindAllString(str, -1)

    fmt.Println(res)
}

运行结果为[123abc],即匹配到以数字开头的单词123abc

  1. 反向预测匹配

反向预测匹配使用语法(?!pattern),表示匹配不满足pattern条件的字符,但不消耗匹配结果。例如,我们要匹配一个字符串中的所有不以数字开头的单词,可以使用反向预测匹配来实现。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "123abc 456def 789ghi"
    pattern := `w+(?!d)`

    re := regexp.MustCompile(pattern)
    res := re.FindAllString(str, -1)

    fmt.Println(res)
}

运行结果为[abc def ghi],即匹配到不以数字开头的单词abcdefghi

  1. 正向否定预测匹配

正向否定预测匹配使用语法(?<!pattern),表示匹配不满足pattern条件的前面字符。例如,我们要匹配一个字符串中的所有不在括号内的数字,可以使用正向否定预测匹配来实现。

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "(123)abc(456)def(789)ghi"
    pattern := `(?<!()(d+)(?!))`

    re := regexp.MustCompile(pattern)
    res := re.FindAllString(str, -1)

    fmt.Println(res)
}

运行结果为[123 789],即匹配到不在括号内的数字123789rrreee

Le résultat courant est [123abc], c'est-à-dire que le mot commençant par un nombre 123abc correspond.

    Correspondance prédictive inversée

    🎜La correspondance prédictive inverse utilise la syntaxe (?!pattern), ce qui signifie faire correspondre des caractères qui ne répondent pas aux conditions du modèle, mais ne consommer les résultats correspondants. Par exemple, si nous voulons faire correspondre tous les mots d’une chaîne qui ne commencent pas par un nombre, nous pouvons utiliser la correspondance par prédiction inverse pour y parvenir. 🎜rrreee🎜Le résultat en cours d'exécution est [abc def ghi], c'est-à-dire que les mots qui ne commencent pas par un chiffre correspondent : abc, def, et ghi . 🎜
      🎜Correspondance de prédiction négative directe🎜🎜🎜La correspondance de prédiction négative directe utilise la syntaxe (?<!pattern), ce qui signifie faire correspondre les caractères précédents qui ne répondent pas aux état du modèle. Par exemple, si nous voulons faire correspondre tous les nombres d’une chaîne qui ne sont pas entre parenthèses, nous pouvons utiliser la correspondance par prédiction négative directe pour y parvenir. 🎜rrreee🎜Le résultat de l'opération est [123 789], qui correspond aux nombres 123 et 789 qui ne sont pas entre parenthèses. 🎜🎜Avec l'exemple ci-dessus, nous comprenons comment utiliser les conditions de pré-recherche pour une correspondance plus précise. Dans les applications pratiques, la sélection des conditions de pré-recherche appropriées selon les besoins peut améliorer considérablement l'efficacité de la correspondance des expressions régulières. Lors de l'écriture d'expressions régulières complexes, nous pouvons utiliser certains outils de test d'expressions régulières en ligne pour le débogage afin de garantir l'exactitude des résultats de correspondance. 🎜🎜J'espère que grâce à l'introduction de cet article, vous aurez une meilleure compréhension des applications avancées des expressions régulières dans le langage Go et serez en mesure d'utiliser de manière flexible les conditions de pré-recherche pour améliorer l'efficacité de la correspondance. Dans le développement réel, si vous rencontrez des exigences complexes en matière de traitement de chaînes, vous pouvez tout aussi bien essayer d'utiliser des expressions régulières, qui vous fourniront un support fonctionnel puissant. 🎜

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