Bonjour, Je n'arrive pas trouver la réponse à un petit problème concernant les regexp (avec ruby 1.9.1). Mais comme je viens de découvrir le monde merveilleux des regexp, j'imagine que la solution doit probablement être toute bête. alors voila: J'ai une ligne html qui ressembme à ça: <th class="date">mai09</th> Dans mon appli Rails, je vais avoir besoin de récupérer la date. Je repère ma date avec cette petite formule. [a-z]{3,}\.?\d{2} Ca marche bien, sauf pour le mois "août", à cause de l'accent... mes essais ont tous fait plouf jusqu'ici. Une idée?
on 2010-02-21 23:57

on 2010-02-22 00:44

Bonsoir, Le 21 février 2010 23:56, rmb <rmeralli@free.fr> a écrit : > Dans mon appli Rails, je vais avoir besoin de récupérer la date. > Je repère ma date avec cette petite formule. > [a-z]{3,}\.?\d{2} > > Ca marche bien, sauf pour le mois "août", à cause de l'accent... mes > essais ont tous fait plouf jusqu'ici. > > Une idée > ? Ruby 1.9 commence à introduire des syntaxes pour gérer spécifiquement les propriétés utf8. Ce qui suit marche bien en 1.9.1 mais non en 1.8.7 : "août".match(/^\p{L}+$/) Dans ton cas il faudrait donc remplacer [a-z] par p{L}, et voir si ça te renvoie ce qu'il faut. Une référence ici : http://www.regular-expressions.info/refunicode.html Cdt, -- JB
on 2010-02-22 10:08

Ca marche effectivement. Très intéressant, merci! On 22 fév, 00:43, Jean-Baptiste Barth <jeanbaptiste.ba...@gmail.com>
on 2010-03-01 00:36

Bon fausse joie :( Bizarrement, ça marche en tant que script ruby, mais sous rails, qui me renvoit un méchant "invalid character property name {L}: /^\p{L}{3,}\.?/" Etonnant non?! Là ça me dépasse. Si quelqu'un avait une idée a me soumettre. Pour info: Ruby version 1.9.1 (x86_64-linux) RubyGems version 1.3.6 Rack version 1.0 Rails version 2.3.5 Active Record version 2.3.5 Active Resource version 2.3.5 Action Mailer version 2.3.5 Active Support version 2.3.5 On 22 fév, 00:43, Jean-Baptiste Barth <jeanbaptiste.ba...@gmail.com>
on 2010-03-01 18:24

Globalement parser du html avec des regexp c'est pas l'idée du siècle car dès que le html ne sera plus valide tu vas obtenir n'importe quoi mais si tu peux faire confiance au html c'est good enough. Ceci dit il y a plein de solution à ton problème, il suffit d'en comprendre la nature: 1) depuis très longtemps les regExp ruby fonctionne avec l'utf8 en 1.8.2 il suffisait de $KCODE = 'u' et depuis c'est souvent par defaut. 2) [a-z] ne contient pas les caractères accentués, ni majuscule, juste de a à z, \w en revanche signifie en gros caractères alphabétique au sens large 3) [a-zû] fonctionne aussi 4) n'utilise pas encore les subtilité de ruby 1.9, sinon tu risques d'entendre tes oreilles siffler, c'est encore trop tôt, 100% des vrais prod sont en 1.8;x Pour en revenir à ton problème de parser du html avec des regexp voilà quelques solutions: Générique: /<th class="date">(.*?)<\/th>/m Spécifique: /<th class="date">([\w\d]*)<\/th>/m Ultra spécifique: /<th class="date">(\w{3,}\d{2})<\/th>/m Tu as juste à regarder dans $1 pour trouver le résultat
on 2010-03-01 21:13

Hello, > Je n'arrive pas trouver la réponse à un petit problème concernant les > regexp (avec ruby 1.9.1). Mais comme je viens de découvrir le monde > merveilleux des regexp, j'imagine que la solution doit probablement > être toute bête. je rajoute +1 à la première remarque de Renaud - franchement: n'utilise pas les regexp pour parser du HTML. Prend un hpricot ou un nokogiri :) Après puisque tu indiques que tu découvres les regexp, voilà quelques remarques: - les regexp peuvent être très utiles et http://www.rubular.com pourra t'aider quand tu t'en sers - mais on dit souvent: quand tu as un problème, et que tu penses aux regexp pour le régler, et bien tu as deux problèmes: ton problème et la regexp - et si tu veux lire pourquoi il ne faut pas utiliser les regexp pour parser du html, et rigoler au passage, lis: http://stackoverflow.com/questions/1732348/regex-m... en espérant t'avoir été utile! -- Thibaut
on 2010-03-01 21:39

> Globalement parser du html avec des regexp c'est pas l'idée du siècle > car dès que le html ne sera plus valide tu vas obtenir n'importe quoi > mais si tu peux faire confiance au html c'est good enough. Oui, je sais bien, mais mon html n'est d'une part pas très bien formé et d'autre part pas tellement susceptible de bouger. La forme des données encore moins, pour l'instant je ne vois pas tellement d'autre façon de faire. > prod sont en 1.8;x Ah... suis passé en 1.9.1 parce que ma distrib a upgradé (archlinux). J'aurais du figer la version. Pour le coup j'ai recompilé la 1.8.7 > /<th class="date">(\w{3,}\d{2})<\/th>/m > > Tu as juste à regarder dans $1 pour trouver le résultat Effectivement ça marche enfin. Merci!