Maison >développement back-end >Golang >Comment puis-je faire correspondre autre chose qu'une chaîne spécifique dans les expressions régulières Go ?

Comment puis-je faire correspondre autre chose qu'une chaîne spécifique dans les expressions régulières Go ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-17 04:55:24689parcourir

How Can I Match Anything Except a Specific String in Go Regular Expressions?

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

Dans Go, la correspondance des expressions régulières est effectuée à l'aide du package regexp. Bien que ce package offre des fonctionnalités puissantes, il présente des limites, dont l’absence d’anticipation. Cela pose des problèmes lorsque l'on tente de faire correspondre tous les modèles sauf des modèles spécifiques, comme dans le cas de l'exclusion d'une chaîne constante.

L'approche initiale consistant à utiliser le modèle /.*/.*/(.*) ne correspondrait qu'à un seul modèle. partie de la chaîne souhaitée, la rendant impropre à l'usage prévu. Au lieu de cela, un modèle plus inclusif est requis.

Comprendre les classes de caractères niées

Go regex utilise des classes de caractères niées pour exclure des caractères ou des groupes de caractères spécifiques. Par exemple, [^/] correspond à n'importe quel caractère à l'exception de la barre oblique (/). Ainsi, remplacer l'initiale .* par [^/]* correspondrait à zéro ou plusieurs caractères autres que /.

Cependant, il est important de capturer les trois parties de la chaîne pour déterminer si la première partie (après le deux barres obliques) ne contient pas la chaîne spécifique. Ceci est réalisé en modifiant le modèle comme suit :

r := regexp.MustCompile(`^[^/]+/[^/]+/(.*)`)

Utilisation de la négation dans l'évaluation des sous-correspondances

Après avoir capturé les trois parties, la valeur peut être extraite sous forme de tableau de cordes. Le premier élément (val[1]) représente la chaîne capturée après la troisième barre oblique. Pour exclure la chaîne spécifique, la condition suivante est évaluée :

if len(val) > 1 && val[1] != "somestring" {
    fmt.Println(val[1])
}

Si la condition est remplie (plus d'un élément dans le tableau et val[1] différent de "somestring"), la sous-chaîne souhaitée est imprimé. Sinon, "Aucune correspondance" s'affiche.

Solution alternative utilisant le service Web Regex sans correspondance

Étant donné que l'expression rationnelle Go manque d'anticipation, on peut utiliser le http://www .formauri.es/personal/pgimeno/misc/non-match-regex Webservice pour générer des modèles annulés compatibles POSIX. En utilisant ce service, un modèle nié pour la chaîne spécifique peut être obtenu.

Conclusion

Bien que les capacités d'expression régulière de Go soient limitées sous certains aspects, il existe des solutions de contournement efficaces pour obtenir la fonctionnalité de correspondance souhaitée. En tirant parti des classes de caractères niées et d'une évaluation minutieuse des sous-correspondances, ou en employant la solution alternative susmentionnée à l'aide d'un service Web d'expression régulière sans correspondance, on peut accomplir la tâche de faire correspondre n'importe quoi sauf une chaîne constante à l'aide d'expressions régulières Go.

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