Maison développement back-end Golang Tutoriel avancé sur les expressions régulières dans le langage Go : comment utiliser les conditions d'assertion

Tutoriel avancé sur les expressions régulières dans le langage Go : comment utiliser les conditions d'assertion

Jul 13, 2023 pm 11:49 PM
正则表达式 go语言 断言条件

Tutoriel avancé sur les expressions régulières en langage Go : comment utiliser les conditions d'assertion

En langage Go, les expressions régulières sont un outil de correspondance de texte puissant et flexible. Il peut être utilisé pour rechercher, extraire et remplacer du texte. Dans le didacticiel précédent, nous avons appris les bases des expressions régulières, notamment les classes de caractères, les quantificateurs et l'échappement par barre oblique inverse. Aujourd’hui, nous allons examiner de plus près l’une des techniques les plus avancées des expressions régulières, à savoir les conditions d’assertion.

Dans les expressions régulières, les conditions d'assertion (Lookaround Assertions) sont une correspondance sans capture qui est utilisée pour déterminer si une position correspondante répond à des conditions spécifiques. Il existe deux types de conditions d'assertion : l'assertion positive (Positive Lookahead) et l'assertion négative (Negative Lookahead). Les assertions positives sont utilisées pour faire correspondre des positions qui remplissent certaines conditions, tandis que les assertions négatives sont utilisées pour faire correspondre des positions qui ne remplissent pas certaines conditions.

Voici un exemple de code utilisant des conditions d'assertion :

package main

import (
    "fmt"
    "regexp"
)

func main() {
    str := "hello, world! Go is awesome."

    // 正向断言示例:匹配含有"Go"的单词
    re1 := regexp.MustCompile(`w+(?=Go)`)
    fmt.Println(re1.FindAllString(str, -1)) // Output: [Go]

    // 正向断言示例:匹配含有"[aeiou]"之后的字母
    re2 := regexp.MustCompile(`[aeiou](?=[a-z])`)
    fmt.Println(re2.FindAllString(str, -1)) // Output: [o, o, i, i, a]

    // 负向断言示例:匹配不含有"world"的单词
    re3 := regexp.MustCompile(`w+(?<!world)`)
    fmt.Println(re3.FindAllString(str, -1)) // Output: [hello,, Go, is, awesome.]

    // 负向断言示例:匹配不含有"[123]"之后的数字
    re4 := regexp.MustCompile(`d(?![123])`)
    fmt.Println(re4.FindAllString(str, -1)) // Output: [4]
}
Copier après la connexion

Dans cet exemple de code, nous utilisons la fonction regexp.MustCompile pour compiler l'expression régulière en un *regexp.Regexp Objet. Nous pouvons ensuite utiliser la méthode FindAllString pour rechercher toutes les correspondances de l'expression régulière dans une chaîne donnée. regexp.MustCompile函数将正则表达式编译为一个*regexp.Regexp对象。然后,我们可以使用FindAllString方法在给定的字符串中查找符合正则表达式的所有匹配。

示例中的第一个正向断言的正则表达式是w+(?=Go)。其中,是一个单词边界匹配元字符,w+表示匹配一个或多个字母、数字或下划线,(?=Go)表示向前查找,匹配后面紧跟着"Go"的单词。执行这个正则表达式后,我们得到了字符串中含有"Go"的单词。

第二个正向断言的正则表达式是[aeiou](?=[a-z])。其中,[aeiou]表示匹配一个元音字母,(?=[a-z])表示向前查找,匹配后面紧跟着一个小写字母的元音字母。执行这个正则表达式后,我们得到了字符串中含有"[aeiou]"之后的字母。

第一个负向断言的正则表达式是w+(?<!world)。其中,(?<!world)表示向前否定查找,匹配不以"world"结尾的单词。执行这个正则表达式后,我们得到了字符串中不含有"world"的单词。

第二个负向断言的正则表达式是d(?![123])。其中,d表示匹配一个数字,(?![123])表示向前否定查找,匹配不以"[123]"结尾的数字。执行这个正则表达式后,我们得到了字符串中不含有"[123]"之后的数字。

通过这些示例代码,你应该对如何使用断言条件有了基本的了解。当你需要根据特定的条件来匹配文本时,断言条件将是非常有帮助的工具。只要记住在Go语言中,正向断言是使用(?=pattern)语法,而负向断言则是使用(?<!pattern)

La première expression régulière d'assertion positive dans l'exemple est w+(?=Go ). Parmi eux, est un métacaractère correspondant à la limite d'un mot, w+ signifie correspondre à une ou plusieurs lettres, chiffres ou traits de soulignement, (?=Go ) signifie rechercher en avant, mots correspondants suivis de "Go". Après avoir exécuté cette expression régulière, nous obtenons les mots contenant « Go » dans la chaîne.

La deuxième expression régulière d'assertion positive est [aeiou](?=[a-z]). Parmi eux, [aeiou] signifie faire correspondre une voyelle, (?=[a-z]) signifie rechercher vers l'avant, faire correspondre une voyelle suivie d'une lettre minuscule. Après avoir exécuté cette expression régulière, nous obtenons les lettres après "[aeiou]" dans la chaîne. 🎜🎜La première expression régulière d'assertion négative est w+ (?<!world). Parmi eux, (?<!world) représente une recherche négative directe, correspondant à des mots qui ne se terminent pas par « monde ». Après avoir exécuté cette expression régulière, nous obtenons les mots qui ne contiennent pas « monde » dans la chaîne. 🎜🎜La deuxième expression régulière d'assertion négative est d(?![123]). Parmi eux, d signifie correspondre à un nombre, et (?![123]) signifie recherche négative directe, correspondant à des nombres qui ne se terminent pas par "[123]". Après avoir exécuté cette expression régulière, nous obtenons que la chaîne ne contient pas de chiffres après "[123]". 🎜🎜Avec ces exemples de codes, vous devriez avoir une compréhension de base de la façon d'utiliser les conditions d'assertion. Les conditions d’assertion sont un outil très utile lorsque vous devez faire correspondre du texte en fonction de conditions spécifiques. N'oubliez pas que dans le langage Go, les assertions positives utilisent la syntaxe (?=pattern), tandis que les assertions négatives utilisent la syntaxe (?<!pattern). Vous pouvez appliquer. eux de manière flexible. 🎜🎜J'espère que ce tutoriel pourra vous aider à mieux comprendre et appliquer les conditions d'assertion dans les expressions régulières. Dans le prochain tutoriel, nous continuerons à présenter d’autres techniques avancées d’expressions régulières en langage Go. Restez à l'écoute! 🎜

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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 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 ...

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. � ...

Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Dans Go, pourquoi les chaînes d'impression avec println et string () ont-elles des effets différents? Apr 02, 2025 pm 02:03 PM

La différence entre l'impression de chaîne dans le langage go: la différence dans l'effet de l'utilisation de fonctions println et string () est en Go ...

Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Comment résoudre le problème de conversion de type user_id lors de l'utilisation du flux redis pour implémenter les files d'attente de messages dans le langage Go? Apr 02, 2025 pm 04:54 PM

Le problème de l'utilisation de Redessstream pour implémenter les files d'attente de messages dans le langage GO consiste à utiliser le langage GO et redis ...

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Apr 02, 2025 pm 05:09 PM

Que dois-je faire si les étiquettes de structure personnalisées à Goland ne sont pas affichées? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Quelle est la différence entre la structure de définition des mots clés `var` et« type »dans le langage Go? Apr 02, 2025 pm 12:57 PM

Deux façons de définir les structures dans le langage GO: la différence entre les mots clés VAR et le type. Lorsque vous définissez des structures, GO Language voit souvent deux façons d'écrire différentes: d'abord ...

Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Quelles bibliothèques de GO sont développées par de grandes entreprises ou fournies par des projets open source bien connus? Apr 02, 2025 pm 04:12 PM

Quelles bibliothèques de GO sont développées par de grandes entreprises ou des projets open source bien connus? Lors de la programmation en Go, les développeurs rencontrent souvent des besoins communs, ...

Lorsque vous utilisez SQL.Open, pourquoi ne signale pas une erreur lorsque DSN passe vide? Lorsque vous utilisez SQL.Open, pourquoi ne signale pas une erreur lorsque DSN passe vide? Apr 02, 2025 pm 12:54 PM

Lorsque vous utilisez SQL.Open, pourquoi le DSN ne signale-t-il pas une erreur? En langue go, sql.open ...

See all articles