Les malheurs des Regex dans Go : pourquoi cela fonctionne-t-il en Python mais pas Go ?
Dans le domaine de la programmation, les expressions régulières (regex) sont des outils inestimables pour la correspondance de modèles et les manipulations de chaînes. Cependant, parfois, les regex se comportent mal de manière inattendue dans différentes langues. Exemple concret : un problème déroutant signalé par un programmeur Go, où une regex qui fonctionne parfaitement en Python échoue inexplicablement en Go.
Le code en question vise à faire correspondre les chaînes suivant un modèle spécifique : "
En y regardant de plus près, le Le coupable est révélé : l'utilisation de chaînes littérales conventionnelles dans Go. Les chaînes dans Go sont généralement placées entre guillemets doubles, ce qui permet des séquences d'échappement telles que "n" pour les sauts de ligne. Cependant, le modèle regex contient le littéral « b », qui désigne une limite de mot. Cela entre en conflit avec le traitement des chaînes par l'interpréteur Go, qui traite "b" comme une séquence d'échappement pour le retour arrière.
Pour remédier à ce problème, Go utilise des chaînes littérales brutes, indiquées par des guillemets arrière, qui interprètent les caractères littéralement, sans toute substitution de séquence d’échappement. En plaçant le modèle d'expression régulière entre guillemets arrière ("`^. =b0xA-Fb$") au lieu de guillemets doubles, le code correspond correctement aux chaînes souhaitées dans 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!