


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 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] }
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)
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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

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

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

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? Lorsque vous utilisez Goland pour le développement du langage GO, de nombreux développeurs rencontreront des balises de structure personnalisées ...

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 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 le DSN ne signale-t-il pas une erreur? En langue go, sql.open ...
