L’une des RE que j’ai écrite dans le message #3 est fausse:
la 3ième RE a deux caractères < successifs en tête.
Désolé pour cette étourderie.
Sans cette faute, cette 3ième RE marche bien avec le bout de code source que tu avais donné dans le message #1, c’est à dire qui comportait deux blancs entre </a></td> et <td class, parce que cette RE comporte 2 blancs.
La 4ième RE, celle avec les crochets, dans ce message #3 marche aussi avec le bout de code source donné dans le message #1, c’est à dire qui comportait deux blancs entre </a></td> et <td class, parce qu’elle comporte elle aussi 2 blancs.
Ces deux RE étaient adaptées au code source que tu avais donné.
--------------------------------------------
Dans le message #8 tu présentes deux RE en disant qu’elles ne matchent pas.
Mais ça n’a rien d’étonnant, parce que tu confirmes qu’il n’y a effectivement pas deux blancs entre '</a></td>' et '<td class' dans le code source. Comme je le pensais.
Or sur les deux RE qui ne marchent pas, la deuxième est encore avec ses deux blancs et la faute que j’ai commise dans le message #3,
et la première n’a qu’un blanc, mais comme elle a des crochets je parie que c’est ma 4ième du message #3 et que tu l’a recopiée dans le message #8 en faisant toi même une faute.
Tu me suis ?
Pour résumer, je pense que quand tu écris que les 2 RE ne marchent pas, tu as en réalité essayé les deux RE avec deux blancs
sur un code source avec un seul blanc.
C’est sûr que ça ne peut pas marcher.
--------------------------------------------------------
Donc je maintiens : à condition évidemment de ne mettre qu’un seul blanc dans la RE s’il n’y a qu’un seul blanc dans le code source entre '</a></td>' et '<td class', eh bien la RE suivante marche:
'#<td><a href="([^"]+)">(.*?)</a></td> <td class="([^"]+)">#'
sur le code source suivant
'#<td><a href="http://www.SITEWEB/index.php">BLABLABLA</a></td> <td class="green">Not listed</td>#'
Une chose est vraisemblable:
tu présentes un code source avec un seul blanc entre </a></td> et <td class,
mais dans le code source complet il existe peut être des cas où il n’y a pas de blanc. Dans ces conditions il faut spécifier dans la RE que le blanc est facultatif entre </a></td> et <td class.
Tant qu’on y est, au lieu de mettre un ? , on met une étoile qui englobe n’importe quel nombre de blancs, de zéro à l’infini.
Ce qui donne la RE
'#<td><a href="([^"]+)">(.*?)</a></td> *<td class="([^"]+)">#'
Il se peut aussi qu’entre une partie '<td><a href="http://www.SITEWEB/index.php">BLABLABLA</a></td>’
dans le code source
et la partie '<td class="green">Not listed</td>'
il y ait parfois des retours à la ligne.
Auquel cas, il faut effectivement mettre \s au lieu d’un blanc dans la RE.
Par ailleurs, comme tu parles maintenant de vouloir attraper aussi “Not listed“, il faut compléter la RE en conséquence. Il faut:ajouter (.+?)</td> et on aboutit à la RE suivante
'#<td><a href="([^"]+)">(.*?)</a></td>\s*<td class="([^"]+)">(.+?)</td>#'
Tu fais comme tu veux, mais de mon point de vue il ne fait pas de doute qu’il est mieux de mettre des crochets. Sinon tu perds en fiabilité de la regex, et à ce moment là, ça ne m’intéresse pas de faire du bricolage.
Partager