Maison > développement back-end > Golang > Comment puis-je simuler un lookbehind négatif dans les expressions régulières Go ?

Comment puis-je simuler un lookbehind négatif dans les expressions régulières Go ?

Susan Sarandon
Libérer: 2024-11-29 12:59:10
original
852 Les gens l'ont consulté

How Can I Simulate Negative Lookbehind in Go Regular Expressions?

Simulation Lookbehind négative dans Go

Dans Go, les assertions Lookbehind négatives ne sont pas prises en charge pour des raisons de performances. Cela peut présenter des difficultés lorsque l'on tente de faire correspondre des modèles à l'aide d'opérateurs lookbehind.

Par exemple, un lookbehind négatif peut être utilisé pour extraire une commande d'une chaîne, en excluant tous les caractères de début de l'ensemble [@#/]. Utilisation d'une assertion d'apparence négative :

\b(?<![@#\/])\w.*
Copier après la connexion

Cependant, cette expression régulière ne sera pas compilée dans Go en raison du manque de prise en charge de l'apparence négative.

Approche alternative

Au lieu de cela, nous pouvons remplacer le lookbehind négatif par un jeu de caractères nié, qui correspond à tout caractère ne figurant pas dans le set.

Regex mis à jour :

\b[^@#/]\w.*
Copier après la connexion

Si les caractères principaux de l'ensemble [@#/] sont autorisés au début de la chaîne, nous pouvons utiliser le ^ ancre :

(?:^|[^@#\/])\b\w.*
Copier après la connexion

Fonction de filtre

Alternativement, nous peut utiliser une fonction de filtre dans Go pour filtrer les chaînes qui commencent par des caractères de l'ensemble [@#/].

func Filter(vs []string, f func(string) bool) []string {
    vsf := make([]string, 0)
    for _, v := range vs {
        if f(v) {
            vsf = append(vsf, v)
        }
    }
    return vsf
}
Copier après la connexion

Fonction de processus

Nous pouvons également créer une fonction de processus qui utilise la fonction de filtre :

func Process(inp string) string {
    t := strings.Split(inp, " ")
    t = Filter(t, func(x string) bool {
        return strings.Index(x, "#") != 0 &&
               strings.Index(x, "@") != 0 &&
               strings.Index(x, "/") != 0
    })
    return strings.Join(t, " ")
}
Copier après la connexion

Cette fonction de processus peut être utilisée pour transformer les chaînes d'entrée, en supprimant tous les mots commençant par des caractères de l'ensemble [@#/].

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal