Maison > développement back-end > Golang > Comment exclure des chaînes spécifiques lors de l'utilisation de Go Regex ?

Comment exclure des chaînes spécifiques lors de l'utilisation de Go Regex ?

Patricia Arquette
Libérer: 2024-12-17 08:57:24
original
143 Les gens l'ont consulté

How to Exclude Specific Strings When Using Go Regex?

Go Regex : exclusion de chaînes spécifiques

Dans Go, vous pouvez rencontrer des difficultés lorsque vous essayez de faire correspondre quoi que ce soit, à l'exception de certaines chaînes constantes, à l'aide du package regexp . Bien que de nombreuses solutions suggérées impliquant des anticipations ne soient pas applicables en raison de la syntaxe limitée de l'expression rationnelle Go, des approches alternatives sont disponibles.

Solution de contournement 1 : utilisez un générateur de modèles annulés

Depuis l'expression rationnelle Go ne prend pas en charge les analyses anticipées, envisagez d'utiliser un service externe comme http://www.formauri.es/personal/pgimeno/misc/non-match-regex pour générer des modèles niés. Par exemple, le modèle nié pour "somestring" est :

$ ^([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?$
Copier après la connexion

Pour utiliser ce modèle nié dans votre regex d'origine, remplacez le dernier (.*) par la , ce qui donne un modèle qui ressemble à :

/[^/]*/[^/]*/(([^s]|s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*([^os]|o([^ms]|m([^es]|e([^s]|s(omes)*([^ost]|t([^rs]|r([^is]|i([^ns]|n[^gs])))|o([^ms]|m([^es]|e[^s]))))))))*(s(s|o(s|m(s|es(omes)*(s|t(s|r(s|i(s|ns)))|o(s|ms)))))*(o((me?)?|mes(omes)*(t(r?|rin?)|o(me?)?)?))?)?)$
Copier après la connexion

Vous pouvez également utiliser le modèle [^/] pour faire correspondre zéro ou plusieurs caractères autres que / au lieu de .*.

Solution de contournement 2 : capturez toutes les sections et vérifiez les valeurs

Bien que vous ne puissiez pas utiliser d'anticipation, vous pouvez capturer les trois parties de votre modèle et vérifier la valeur de le premier groupe de capture pour déterminer s'il faut utiliser la valeur capturée ou signaler aucune correspondance :

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := "anything/anything/somestring"
    r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
    val := r.FindStringSubmatch(s)

    if len(val) > 1 && val[1] != "somestring" {
        fmt.Println(val[1])
    } else {
        fmt.Println("No match")
    }
}
Copier après la connexion

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!

source:php.cn
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