J'ai un petit soucis avec une expression régulière.
Le problème vient de $string2
Je dois récupérér une valeur dans un fichier *.htm et parfois, j'ai
"<B>" avant ma valeur, les autres fois il n'y est pas.
Voilà mon expression régulière. (qui marche avec $string mais pas avec $string2)
Code : Tout sélectionner
StringRegExp($string,'(?:Oi)(?:.*)\r\n(?:.*)\r\n(?:.*)\r\n(?:.*)>(?:<B>)(\d*)',1)
solutionner ce "caprice" de code en changeant "(?:<B>)" par "(?:<B>)?"
Je me suis basé sur cet extrait de la doc.
"?" The previous character, set or group may or may not appear. Equivalent to {0, 1}
donc, selon ma compréhension de la chose apparemment erronnée, il suffit d'ajouter
un point d'interrogation après un "set" pour signifier qu'il pourrait ne pas être présent.
Mais ça ne fonctionne pas .
Une idée ?
Pour résumer, mon code tel qu'il est permet de récupérer la valeur "109" de $string mais pas
de $string2. J'ai besoin d'être en mesure de solutionner les 2 cas avec la même expression.
(J'ai une solution alternative, consistant à faire disparaître tous les "<B>" du fichier avant
de lancer une expression régulière qui n'aurait plus à en tenir compte mais j'aimerais
le faire en une seule opération, question de rapidité.)
Merci d'avance pour vos suggestions. (Ça fait 3 heures que je penche sur le problème et
je ne suis pas parvenu à dénicher l'information qui me manque quant à l'utilisation de "?" )
Code : Tout sélectionner
#include<array.au3>
$string = '<TD align=left width=150 bgColor=#006699><B>Oi</B></TD>' & @CRLF & '<TD align=left bgColor=#006699><B>Elite Knight</B></TD>' & @CRLF & '<TD align=right width=30 bgColor=#006699><B>160</B></TD>' _
& @CRLF & '<TD align=right width=75 bgColor=#006699><B>109</B></TD></TR>' & @CRLF & '<TR onmouseover="cbc(this, 1)" onmouseout="cbc(this, 0)">'
$string2 = '<TD align=left width=150 bgColor=#006699><B>Oi</B></TD>' & @CRLF & '<TD align=left bgColor=#006699><B>Elite Knight</B></TD>' & @CRLF & '<TD align=right width=30 bgColor=#006699><B>160</B></TD>' _
& @CRLF & '<TD align=right width=75 bgColor=#006699>109</TD></TR>' & @CRLF & '<TR onmouseover="cbc(this, 1)" onmouseout="cbc(this, 0)">'
$arr = StringRegExp($string,'(?:Oi)(?:.*)\r\n(?:.*)\r\n(?:.*)\r\n(?:.*)>(?:<B>)(\d*)',1)
_ArrayDisplay($arr)
Edit : Après quatre heures et + de "gossage intensif" (en bon québécois) ou si vous préférez... Après quatre heures à tourner en rond, usant prématurément tapis et pantoufles, je parvint
à régler le problème en laissant tomber "?" et surtout, en changeant \d* pour \d+
Donc... le problème n'est plus. Merci encore !