[RÉSOLU] REGEX : Bug ou erreur ?

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

[RÉSOLU] REGEX : Bug ou erreur ?

Message par boddhi »

Bonjour à tous,

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)
Le retour :
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"
Cette anomalie ne semble se produire que lorsque des caractères unicode particuliers sont présents dans la chaîne à traiter.
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 !
Dernière modification par boddhi le mar. 24/janv./2023 7:59, modifié 2 fois.
Marc56
Messages : 2197
Inscription : sam. 08/févr./2014 15:19

Re: REGEX : Bug ou erreur ?

Message par Marc56 »

Bonjour,

De mémoire, il y a peut-être quelque-chose avec la façon dont PB (ou le moteur PCRE) traite les caractères Utf-8: codé sur 2 (voir 3) octets seulement alors que la norme peut aller jusqu'à 4, ce qui explique que certains caractères passent ou pas.

À voir (sur le forum us)
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: REGEX : Bug ou erreur ?

Message par boddhi »

J'ai recherché sur le forum US et n'ai trouvé concernant ce problème précis...
J'ai laissé un post. Je verrai bien.

Merci.
boddhi
Messages : 604
Inscription : lun. 26/avr./2010 16:14
Localisation : S 48° 52' 31'' / O 123° 23' 33''

Re: REGEX : Bug ou erreur ?

Message par boddhi »

Bug signalé : Topic
Répondre