$regex = '`[arrache de cheveux]{0,100000}?`'

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 23 juin 2009 à 21:57
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 25 juin 2009 à 22:56
Salut,

Je prends la liberté de poster sur le forum regex (peu fréquenté semble t il, snif) et celui ci.

En cette fin de journée fatigante je galère un peu.
Voici la trame que j'essaie de parser :
tototata - 140 db - excellent - truc-bidule - bidule machin

 
140 db, étonnant, 8 pm, theodore

Données bidule, truc (jazz)

en noir : ce que je cherche à capturer (changeant, forcemment)
en bleu : les parties qui ne changent jamais
en rouge : ce qui fait que je vais devenir chauve plus vite que prévu

A savoir qu'il peut y avoir des retours à la ligne et autres caractères "blancs" aléatoires entre la cloture d'une balise et la suivante.

Le problème :
Les données en rouge peuvent prendre les formes suivantes :
140 db, étonnant, 8 pm, theodore

140 db, 8 pm, theodore

140 db, étonnant, 8 pm

140 db, étonnant, machinchose, 8 pm, theodore

8 pm

etc ... en fait le nombre de données, séparées par des virgules (et qui peuvent contenir des chiffres, des caractères spéciaux etc ... mais jamais de virgule), peut changer, avant comme après le 8 pm que je cherche à capturer.
Par ailleurs, pour faciliter grandement la chose, le 8 pm (qui peut également être 208 pm, 102 pm) n'est pas toujours présent.

Pour ceux qui suivent encore après cette magnifique tentative d'explication :
je cherche à trouver le nombre de pm (8 pm) que contient la chaîne, et savoir également, de façon fiable (of course) si elle n'est pas présente.

Les autres données (en noir) ne me pose pas de pb, de même qu'isoler la ligne rouge et appliquer un second traitement dessus pour sortir le 8 pm (mais je souhaiterai le faire en 1 seule regex)

... en espérant m'être bien expliqué (pas gagné, je sais )
Merci d'avance.

Cordialement,

Kohntark -

9 réponses

kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
23 juin 2009 à 23:05
Aaaaah là y a du challenge... ça change... lol... .. . ;o)

Je suppose que c'est une regexp exécutée sous php... sinon précise le langage... ton 8pm aura toujours cette forme là (num+espace+pm) ou pas... c'est quoi une heure au format anglophone... .. ?

Par contre il y a des chances qu'il faille passer par 2 regexp une pour le (x)pm et une autre pour le reste... je jette un coup d'oeil quand j'aurais 2 minutes et te tiens au fil si je trouve quelque chose... .. .

@ tchaOo°
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 juin 2009 à 00:15
essaye ça...

/\b([0-9]+\s*pm)\b/i

sur...

140 db, ligne 1, 8 pm, 10pm theodore

db, 2, pm, ligne 2

140 db, étonnant, ligne 4, 100pm, theodore

140db, ligne 40 pm

opsus20pmjkl, ligne 3, 12 pm

dbligne12pmplm

m228 pm fgh
étonnant, ligne 4, 29 pm, theodore

140 db, 140 pmdb,ligne 3, 46pm

10 pm


ça match correctement...

array (
0 => '8 pm',
1 => '10pm',
2 => '100pm',
3 => '40 pm',
4 => '12 pm',
5 => '29 pm',
6 => '46pm',
7 => '10 pm',
),

si ça va pas précise plus en détail sous quelle forme peut se présenter ta variable et ton texte... .. .

@ tchaOo°
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 juin 2009 à 00:18
Ah... si tu veux qu'il y ai absolument un espace entre ta valeur et on "pm" vire le * après le \s

D'ailleurs remplace le \s par un espace il serait capable de te matcher

plopmon text 20
pm remontext

^_^

@ tchaOo°
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
24 juin 2009 à 09:31
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
24 juin 2009 à 09:37
Alors, juste un passage en vitesse.. tu utilises SPL avec Tidy ?? Des fois ça aide pas mal.. mais attention PHP 5.3 obligé.
S.
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 juin 2009 à 11:20
Je vois pas le rapport entre SPL/Tidy et la rexexp que veut kohntark... .. .

@ tchaOo°
0
syndrael Messages postés 2378 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 29 décembre 2012 20
24 juin 2009 à 11:40
Je pensais que SPL/Tidy aurait permis de trouver H3.. puis le Span juste après via la classe TidyNode récupérer le tototatat qu'il cherche.. mais ce n'était qu'une piste.. Et puis aussi que j'aime bien utiliser les dernières fonctions sorties.
Ce n'était qu'une piste..
S.
0
kankrelune Messages postés 1293 Date d'inscription mardi 9 novembre 2004 Statut Membre Dernière intervention 21 mai 2015
24 juin 2009 à 12:03
Ah oki... .. . :o)

Oui effectivement on peut passer par le DOM aussi mais je ne pense pas que ce soit adapté dans cette situation... beaucoup trop de code là ou une regexp suffit je pense... .. .

@ tchaOo°
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
25 juin 2009 à 22:56
Merci pour ta réponse Syndrael.
Comme Kankrelune je ne pense pas que cela soit adapté. Cela étant je connais très peu.
Pour info j'ai répondu sur le forum regex : http://regex.codes-sources.com/forum/sujet-REGEXP-CAPTURE-DONNEES_1330084.aspx#1

Cordialement,

Kohntark -
0
Rejoignez-nous