Maison > développement back-end > Golang > Comment exclure une chaîne spécifique lors de la correspondance dans les expressions régulières Go ?

Comment exclure une chaîne spécifique lors de la correspondance dans les expressions régulières Go ?

Mary-Kate Olsen
Libérer: 2024-12-20 07:58:12
original
878 Les gens l'ont consulté

How to Exclude a Specific String When Matching in Go Regular Expressions?

Faire correspondre tout sauf une chaîne constante dans les expressions régulières Go

Dans Go, en utilisant le moteur d'expression régulière RE2, il n'existe aucun moyen direct d'utiliser des assertions anticipées pour faire correspondre tout caractères sauf une chaîne spécifique. Cependant, il existe des approches alternatives pour obtenir cette fonctionnalité :

Service Web pour générer des modèles annulés

  1. Utilisez le service en ligne [Non-match REGEX](http ://www.formauri.es/personal/pgimeno/misc/non-match-regex) pour générer un modèle nié pour la chaîne que vous souhaitez exclure ("somestring" dans ce cas).
  2. Dans votre expression régulière, remplacez le dernier (.*) par le motif nié généré (assurez-vous qu'il n'y a pas de barre oblique inverse dans le motif nié copié).

Pour exemple, si le modèle nié généré 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

Votre expression régulière finale ressemblera comme :

/[^/]*/[^/]*/(([^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

Capturer toutes les parties

Vous pouvez également capturer les trois parties de la chaîne d'entrée (séparées par des barres obliques) dans une tranche. Vérifiez ensuite si la troisième partie (val[1]) est égale à la chaîne que vous souhaitez exclure (« somestring » dans ce cas). S'il ne correspond pas, utilisez val[1] comme résultat attendu :

package main

import (
    "fmt"
    "regexp"
)

func main() {
    s := "anything/anything/somestring"
    r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)
    val := r.FindStringSubmatch(s)
    // fmt.Println(val[1]) // -> somestring
    if len(val) > 1 && val[1] != "somestring" { // val has more than 1 element and is not equal to somestring?
        fmt.Println(val[1])      // Use val[1]
    } else {
        fmt.Println("No match")  // Else, report 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