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
Mary-Kate Olsenoriginal
2024-12-20 07:58:12964parcourir

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?)?)?))?)?$

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?)?)?))?)?)$

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

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