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?)?)?))?)?$
Pour utiliser ce modèle nié dans votre regex d'origine, remplacez le dernier (.*) par la
/[^/]*/[^/]*/(([^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?)?)?))?)?)$
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") } }
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!