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
Susan Sarandonoriginal
2024-11-29 12:59:10758parcourir

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

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

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

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
}

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, " ")
}

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