Puis-je avoir votre avis sur un problème concernant les RegEx ? :
Ci-dessous, un code de démonstration (source encodé en UTF8) :
Code : Tout sélectionner
Procedure Pc_Traitement_RegEx(ArgChaineAexaminer.s)
IdRegEx.a=0
ExpressionRegEx.s="</?\w+:?\w*((\s+(\w+-?+)+:?\w?+(\s*=\s*(?:"+Chr(34)+".*?"+Chr(34)+"|'.*?'|[^'"+Chr(34)+">\s]+))?)+\s*|\s*)/?>"
If CreateRegularExpression(IdRegEx,ExpressionRegEx)
If ExamineRegularExpression(IdRegEx,ArgChaineAexaminer)
While NextRegularExpressionMatch(IdRegEx)
Debug RegularExpressionMatchString(IdRegEx)
Wend
EndIf
FreeRegularExpression(IdRegEx)
EndIf
EndProcedure
Debug "Retour 1er appel :"
Chaine.s="<ChaineBidon"
Pc_Traitement_RegEx(Chaine)
Debug "Retour 2e appel :"
Chaine="<ChaineBidon>"
Pc_Traitement_RegEx(Chaine)
Debug "Retour 3e appel :"
Chaine="<meta name="+Chr(34)+"description"+Chr(34)+" content="+Chr(34)+"personnages préférés"+Chr(34)+" />"
Pc_Traitement_RegEx(Chaine)
Debug "Retour 4e appel :"
Chaine.s="<meta name="+Chr(34)+"description"+Chr(34)+" content="+Chr(34)+"personnages préférés: 😎 Emoji, ❤ Cœurs, 💲 Devises, → Flèches"+Chr(34)+" />"
Pc_Traitement_RegEx(Chaine)
Cette anomalie ne semble se produire que lorsque des caractères unicode particuliers sont présents dans la chaîne à traiter.Retour 1er appel : => Pas de retour : Normal car le '>' est manquant à la fin de la chaîne
Retour 2e appel : => Retour attentu Ok
<ChaineBidon>
Retour 3e appel : => Retour attentu Ok
<meta name="description" content="personnages préférés" />
Retour 4e appel : => Retour attentu Ok SAUF qu'il manque "/>" en fin de chaîne de retour
<meta name="description" content="personnages préférés:Emoji, ❤ Cœurs,
Devises, → Flèches"
L'expression régulière littérale joue pleinement son rôle et sa construction ne semble pas devoir être remise en cause puisqu'il y bien un retour via RegularExpressionMatchString().
Ce que je ne m'explique pas, c'est l'absence du "/>" final dans le dernier cas.
Alors, bug de la lib RegEx ou mauvaise approche de ma part dans le traitement unicode (sachant que les chaînes à traiter sont récupérées à partir de HTTPInfo()) ?
Merci de votre avis/aide.
23.01.23 : Bug signalé sur ce topic
Problème résolu : C'est ici que ça se passe !