Maison développement back-end Golang Tutoriel avancé sur les expressions régulières en langage Go : Comment utiliser les assertions de largeur nulle

Tutoriel avancé sur les expressions régulières en langage Go : Comment utiliser les assertions de largeur nulle

Jul 12, 2023 pm 01:39 PM

Tutoriel avancé sur les expressions régulières en langage Go : Comment utiliser les assertions de largeur nulle

L'expression régulière est un puissant outil de correspondance de texte qui peut être utilisé pour rechercher et remplacer le texte d'un modèle spécifique dans une chaîne. La bibliothèque d'expressions régulières du langage Go fournit des fonctionnalités riches, notamment des assertions de largeur nulle, qui sont très utiles dans certains scénarios. Cet article vous expliquera comment utiliser les assertions de largeur nulle dans le langage Go pour améliorer la flexibilité des expressions régulières.

L'assertion de largeur nulle est une expression régulière spéciale utilisée pour confirmer la position d'un sous-modèle (ou d'une sous-chaîne) sans consommer de caractères. Cela nous aide à trouver le texte qui correspond à des critères spécifiques sans renvoyer le texte lui-même. Dans le langage Go, il existe quatre types d'assertions de largeur nulle : l'assertion positive de largeur nulle, l'assertion négative de largeur nulle, le groupe de non-capture d'assertion de largeur nulle positive et le groupe de non-capture d'assertion de largeur nulle négative.

L'assertion d'anticipation positive est utilisée pour rechercher du texte avec un motif spécifique apparaissant après une certaine position. Sa syntaxe est (?=...), où ... représente le modèle qui doit correspondre. Voici un exemple : (?=...),其中...表示需要匹配的模式。下面是一个示例:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "123abc456"
    pattern := `d(?=abc)`  // 匹配数字后面紧跟着"abc"的情况
    re := regexp.MustCompile(pattern)
    results := re.FindAllString(str, -1)
    fmt.Println(results)  // 输出:[1]
}
Copier après la connexion

在上面的例子中,我们要匹配的是数字后面紧跟着"abc"的情况,即数字"1"。这里使用了正向零宽断言,匹配成功后返回的结果是数字"1"。

负向零宽断言(Negative Lookahead Assertion)则是查找在某个位置后面没有特定模式出现的文本。它的语法是(?!...),其中...表示需要排除的模式。下面是一个示例:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "123abc456"
    pattern := `d(?!abc)`  // 匹配数字后面不跟着"abc"的情况
    re := regexp.MustCompile(pattern)
    results := re.FindAllString(str, -1)
    fmt.Println(results)  // 输出:[2 3]
}
Copier après la connexion

在上面的例子中,我们要匹配的是数字后面不跟着"abc"的情况,即数字"2"和"3"。这里使用了负向零宽断言,匹配成功后返回的结果是数字"2"和"3"。

正向零宽断言非捕获组(Positive Lookahead Non-Capturing Group)和负向零宽断言非捕获组(Negative Lookahead Non-Capturing Group)的使用类似,只是在语法上不需要在(...)外面添加?=?!。下面是一个例子:

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "abc123xyz"
    pattern := `(?i:[a-z]+(?=d))`  // 匹配小写字母后面紧跟着数字的情况
    re := regexp.MustCompile(pattern)
    results := re.FindAllString(str, -1)
    fmt.Println(results)  // 输出:[abc]
}
Copier après la connexion

在上面的例子中,我们要匹配的是小写字母后面紧跟着数字的情况,即"abc"。这里使用了正向零宽断言非捕获组,匹配成功后返回的结果是"abc"。

负向零宽断言非捕获组同样使用语法(?i:...),只需要在(...)

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "abc123XYZ"
    pattern := `(?i:[a-z]+(?!123))`  // 匹配小写字母后面不跟着"123"的情况
    re := regexp.MustCompile(pattern)
    results := re.FindAllString(str, -1)
    fmt.Println(results)  // 输出:[abc]
}
Copier après la connexion
Dans l'exemple ci-dessus, ce que nous voulons faire correspondre est le cas où le nombre est suivi de "abc", c'est-à-dire le chiffre "1". Une assertion avant de largeur nulle est utilisée ici, et le résultat renvoyé après une correspondance réussie est le nombre « 1 ».

L'assertion d'anticipation négative consiste à trouver du texte qui n'a pas de modèle spécifique après une certaine position. Sa syntaxe est (?!...), où ... représente le modèle qui doit être exclu. Voici un exemple :

rrreee

Dans l'exemple ci-dessus, ce que nous voulons faire correspondre est le cas où le nombre n'est pas suivi de "abc", c'est-à-dire les nombres "2" et "3". Une assertion négative de largeur nulle est utilisée ici, et les résultats renvoyés après une correspondance réussie sont les nombres « 2 » et « 3 ». 🎜🎜Le groupe de non-capture d'anticipation positive et le groupe de non-capture d'anticipation négative sont utilisés de la même manière, sauf que la syntaxe ne nécessite pas ( ...), ajoutez ?= ou ?!. Voici un exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, ce que nous voulons faire correspondre est le cas où les lettres minuscules sont suivies de chiffres, c'est-à-dire "abc". Un groupe sans capture d'assertion de largeur nulle avant est utilisé ici, et le résultat renvoyé après une correspondance réussie est "abc". 🎜🎜L'assertion négative de largeur nulle pour les groupes non capturants utilise également la syntaxe (?i:...), ajoutez simplement le modèle à exclure dans (...) code> . Voici un exemple : 🎜rrreee🎜Dans l'exemple ci-dessus, ce que nous voulons faire correspondre est le cas où les lettres minuscules ne sont pas suivies de "123", c'est-à-dire "abc". Un groupe de non-capture d'assertion négative de largeur nulle est utilisé ici, et le résultat renvoyé après une correspondance réussie est "abc". 🎜🎜En utilisant des assertions de largeur nulle, nous pouvons étendre les capacités des expressions régulières pour obtenir une correspondance de texte plus précise. Lors de l'utilisation d'expressions régulières, l'utilisation appropriée d'assertions de largeur nulle peut économiser du code et améliorer l'efficacité de la correspondance. J'espère que cet article vous aidera à comprendre et à utiliser des assertions de largeur nulle avec des expressions régulières en langage 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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les vulnérabilités de Debian OpenSSL Quelles sont les vulnérabilités de Debian OpenSSL Apr 02, 2025 am 07:30 AM

OpenSSL, en tant que bibliothèque open source largement utilisée dans les communications sécurisées, fournit des algorithmes de chiffrement, des clés et des fonctions de gestion des certificats. Cependant, il existe des vulnérabilités de sécurité connues dans sa version historique, dont certaines sont extrêmement nocives. Cet article se concentrera sur les vulnérabilités et les mesures de réponse communes pour OpenSSL dans Debian Systems. DebianopenSSL CONNUTS Vulnérabilités: OpenSSL a connu plusieurs vulnérabilités graves, telles que: la vulnérabilité des saignements cardiaques (CVE-2014-0160): cette vulnérabilité affecte OpenSSL 1.0.1 à 1.0.1F et 1.0.2 à 1.0.2 Versions bêta. Un attaquant peut utiliser cette vulnérabilité à des informations sensibles en lecture non autorisées sur le serveur, y compris les clés de chiffrement, etc.

Comment utilisez-vous l'outil PPROF pour analyser les performances GO? Comment utilisez-vous l'outil PPROF pour analyser les performances GO? Mar 21, 2025 pm 06:37 PM

L'article explique comment utiliser l'outil PPROF pour analyser les performances GO, notamment l'activation du profilage, la collecte de données et l'identification des goulots d'étranglement communs comme le processeur et les problèmes de mémoire. COMMANDE: 159

Comment rédigez-vous des tests unitaires en Go? Comment rédigez-vous des tests unitaires en Go? Mar 21, 2025 pm 06:34 PM

L'article traite des tests d'unité d'écriture dans GO, couvrant les meilleures pratiques, des techniques de moquerie et des outils pour une gestion efficace des tests.

Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Quel est le problème avec le fil de file d'attente dans GO's Crawler Colly? Apr 02, 2025 pm 02:09 PM

Problème de threading de file d'attente dans Go Crawler Colly explore le problème de l'utilisation de la bibliothèque Crawler Crawler dans le langage Go, les développeurs rencontrent souvent des problèmes avec les threads et les files d'attente de demande. � ...

Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Quelles bibliothèques sont utilisées pour les opérations du numéro de point flottantes en Go? Apr 02, 2025 pm 02:06 PM

La bibliothèque utilisée pour le fonctionnement du numéro de point flottante dans le langage go présente comment s'assurer que la précision est ...

Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Transformant du développement frontal au développement back-end, est-il plus prometteur d'apprendre Java ou Golang? Apr 02, 2025 am 09:12 AM

Chemin d'apprentissage du backend: le parcours d'exploration du front-end à l'arrière-end en tant que débutant back-end qui se transforme du développement frontal, vous avez déjà la base de Nodejs, ...

Quelle est la commande Go FMT et pourquoi est-elle importante? Quelle est la commande Go FMT et pourquoi est-elle importante? Mar 20, 2025 pm 04:21 PM

L'article traite de la commande GO FMT dans GO Programming, qui formate le code pour adhérer aux directives de style officiel. Il met en évidence l'importance de GO FMT pour maintenir la cohérence du code, la lisibilité et la réduction des débats de style. Meilleures pratiques pour

Comment spécifier la base de données associée au modèle de Beego ORM? Comment spécifier la base de données associée au modèle de Beego ORM? Apr 02, 2025 pm 03:54 PM

Dans le cadre du cadre de beegoorm, comment spécifier la base de données associée au modèle? De nombreux projets Beego nécessitent que plusieurs bases de données soient opérées simultanément. Lorsque vous utilisez Beego ...

See all articles