[php] prob regex fin de motif
Fermé
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
-
14 sept. 2010 à 12:05
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 14 sept. 2010 à 18:51
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 14 sept. 2010 à 18:51
A voir également:
- [php] prob regex fin de motif
- Easy php - Télécharger - Divers Web & Internet
- Fin du partage de compte disney + - Accueil - Streaming
- Another earth explication fin - Forum Cinéma / Télé
- Supprimer lignes vides excel fin de tableau - Forum Excel
- Un tampon d'encre de l'imprimante est quasiment en fin de vie. veuillez contacter l'assistance epson. - Forum Imprimante
8 réponses
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
14 sept. 2010 à 12:43
14 sept. 2010 à 12:43
Comment modifier ma regex ? Pour modifier il faudrait nous la montrer d'abord ;)
sinon pour récupérer tous les chiffres en fin de motif :
sinon pour récupérer tous les chiffres en fin de motif :
[0-9]+$
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
14 sept. 2010 à 12:49
14 sept. 2010 à 12:49
Voir le lien, tous est marqué.
sinon la voila :
#>(.+)S: ([0-9]+) - Ep: ([0-9]{1,4})#isU
et voici le texte :
> Unnatural History
S: 1 - Ep: 11
> Melissa & Joey
S: 1 - Ep: 4
> Packed to the Rafters
S: 3 - Ep: 11
> Warehouse 13
S: 2 - Ep: 9
> Make It or Break It
S: 2 - Ep: 10
> White Collar
S: 2 - Ep: 8
> Rescue Me
S: 6 - Ep: 10
> Covert Affairs
S: 1 - Ep: 8
> Louie
S: 1 - Ep: 11
> Late Show with David Letterman
S: 17 - Ep: 190
> The Tonight Show with Jay Leno
S: 18 - Ep: 110
sinon la voila :
#>(.+)S: ([0-9]+) - Ep: ([0-9]{1,4})#isU
et voici le texte :
> Unnatural History
S: 1 - Ep: 11
> Melissa & Joey
S: 1 - Ep: 4
> Packed to the Rafters
S: 3 - Ep: 11
> Warehouse 13
S: 2 - Ep: 9
> Make It or Break It
S: 2 - Ep: 10
> White Collar
S: 2 - Ep: 8
> Rescue Me
S: 6 - Ep: 10
> Covert Affairs
S: 1 - Ep: 8
> Louie
S: 1 - Ep: 11
> Late Show with David Letterman
S: 17 - Ep: 190
> The Tonight Show with Jay Leno
S: 18 - Ep: 110
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
14 sept. 2010 à 13:07
14 sept. 2010 à 13:07
inspires toi d'une de ces trois méthodes qui te renvoient un array donc facilement exploitable:
$chaine='bla blabblallal 09h45-20h30 reblalalalal bla blabblallal 12h20-21h00 reblalalalal';//exemple on veut récupérer l'heure au milieu de tout ça $masque="/[0-9]{2}h[0-9]{2}-[0-9]{2}h[0-9]{2}/"; //ou dans ton cas "/EP:[0-9]{1,}/" preg_match_all($masque,$chaine,$out1,PREG_PATTERN_ORDER); echo 'Avec flag:PREG_PATTERN_ORDER:<br /><pre>'; print_r($out1); echo '</pre>'; preg_match_all($masque,$chaine,$out2,PREG_SET_ORDER); echo '<br /><br />Avec flag:PREG_SET_ORDER:<br /><pre>'; print_r($out2); echo '</pre>'; preg_match_all($masque,$chaine,$out3,PREG_OFFSET_CAPTURE); echo '<br /><br />Avec flag:PREG_OFFSET_CAPTURE:<br /><pre>'; print_r($out3); echo '</pre>';
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
14 sept. 2010 à 13:17
14 sept. 2010 à 13:17
J'avais déjà vu ça dans la doc php mais ton exemple ne ressemble pas au mien.
je reprend la fin de mon exemple :
sachant que 110 est la fin de la chaine, comment fait tu pour récupérer tous les nombres (17, 190, 18 et 110)
Le problème se pose plus sur les 2 nombres à 3 chiffres car il n'y a rien après alors que dans ton exemple, il y a encore des caractères après la fin du motif.
je reprend la fin de mon exemple :
> Late Show with David Letterman S: 17 - Ep: 190 > The Tonight Show with Jay Leno S: 18 - Ep: 110
sachant que 110 est la fin de la chaine, comment fait tu pour récupérer tous les nombres (17, 190, 18 et 110)
Le problème se pose plus sur les 2 nombres à 3 chiffres car il n'y a rien après alors que dans ton exemple, il y a encore des caractères après la fin du motif.
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
14 sept. 2010 à 13:30
14 sept. 2010 à 13:30
bon ben voilà les trois méthodes qui fonctionnent chez moi:
<?php $chaine='Late Show with David Letterman S: 17 - Ep: 190'; $masque= "/[0-9]{1,}$/"; //methode 1 preg_match_all($masque,$chaine,$out1,PREG_PATTERN_ORDER); echo 'Avec flag:PREG_PATTERN_ORDER:<br /><pre>'; print_r($out1); echo '</pre>'; echo '<br />Soit le chiffre extrait: '.$out1[0][0].'<br /><br />'; //methode 2 preg_match_all($masque,$chaine,$out2,PREG_SET_ORDER); echo '<br /><br />Avec flag:PREG_SET_ORDER:<br /><pre>'; print_r($out2); echo '</pre>'; echo '<br />Soit le chiffre extrait: '.$out2[0][0].'<br /><br />'; //methode 3 preg_match_all($masque,$chaine,$out3,PREG_OFFSET_CAPTURE); echo '<br /><br />Avec flag:PREG_OFFSET_CAPTURE:<br /><pre>'; print_r($out3); echo '</pre>'; echo '<br />Soit le chiffre extrait: '.$out3[0][0].'<br /><br />'; ?>
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
14 sept. 2010 à 14:10
14 sept. 2010 à 14:10
Non ce n'est pas ça, ici tu coupe la chaine.
essaye avec ceci :
$chaine = '> Late Show with David Letterman
S: 17 - Ep: 190
> The Tonight Show with Jay Leno
S: 18 - Ep: 110';
Essaye de récupérer les 4 nombres.
Sinon, je vais tout simplement utiliser un explode() mais je vais devoir utiliser beaucoup plus de regex.
essaye avec ceci :
$chaine = '> Late Show with David Letterman
S: 17 - Ep: 190
> The Tonight Show with Jay Leno
S: 18 - Ep: 110';
Essaye de récupérer les 4 nombres.
Sinon, je vais tout simplement utiliser un explode() mais je vais devoir utiliser beaucoup plus de regex.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
14 sept. 2010 à 18:04
14 sept. 2010 à 18:04
Autant pour moi, j'avais mal lu et pas vu le lien que tu avais fourni.
Petite question sur la structure de l'input, est-ce bien comme ça, 1 sur chaque ligne ( avec donc en fin de ligne un CR LF ? ) ou bien c'est tout a la suite et c'est pour une question de présentation que tu l'as posté comme ça ?
tu récupères l'input comment ?
Petite question sur la structure de l'input, est-ce bien comme ça, 1 sur chaque ligne ( avec donc en fin de ligne un CR LF ? ) ou bien c'est tout a la suite et c'est pour une question de présentation que tu l'as posté comme ça ?
tu récupères l'input comment ?
okuni
Messages postés
1221
Date d'inscription
jeudi 4 septembre 2008
Statut
Membre
Dernière intervention
2 janvier 2014
126
14 sept. 2010 à 18:15
14 sept. 2010 à 18:15
qu'est ce qu'un CR LF ?
Oui la chaine comporte les retour de chariot comme présenté ici.
Oui la chaine comporte les retour de chariot comme présenté ici.
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
14 sept. 2010 à 18:25
14 sept. 2010 à 18:25
Si la chaine comporte les retour chariot, pourquoi ne pas s'ne aider avec un \r\n dans ta regexp ? Ca aiderai le {1,4} à aller " jusqu'au bout ".
Du coup
Pour info, le CR LF, c'est les 2 caractère de fin de ligne,
CR : Carriage Return : \r : 13 en décimal
LF Line Feed 10 en décimal : \n.
c.f table ascii : http://www.asciitable.com/
Du coup
#>(.+)S: ([0-9]+) - Ep: ([0-9]{1,4})\r\n#isU
Pour info, le CR LF, c'est les 2 caractère de fin de ligne,
CR : Carriage Return : \r : 13 en décimal
LF Line Feed 10 en décimal : \n.
c.f table ascii : http://www.asciitable.com/
Alain_42
Messages postés
5361
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
894
14 sept. 2010 à 18:51
14 sept. 2010 à 18:51
non je ne découpe pas la chaine mais prend seulement la fin, fais l'essai tu verras, je pensais que tu lisait les chaines une par une
un script qui récupéres tous les chiffres dans une chaine plus longue, fais l'essai tu verras que ça les extrait bien !
un script qui récupéres tous les chiffres dans une chaine plus longue, fais l'essai tu verras que ça les extrait bien !
$chaine=$chaine = '> Late Show with David Letterman S: 17 - Ep: 190 > The Tonight Show with Jay Leno S: 18 - Ep: 110'; //$masque="/[0-9]{2}h[0-9]{2}-[0-9]{2}h[0-9]{2}/"; $masque= "/[0-9]{1,}/"; //methode 1 preg_match_all($masque,$chaine,$out1,PREG_PATTERN_ORDER); echo 'Avec flag:PREG_PATTERN_ORDER:<br /><pre>'; print_r($out1); echo '</pre>'; echo '<br />les chiffres extraits: <br />'; //on parcours le deuxième niveau de l'array pour avoir tous les chiffres //si on veux en faire le total $total=0; for($i=0;$i<sizeof($out1[0]);$i++){ echo 'chiffre n° '.($i+1).' = '.$out1[0][$i].'<br />'; $total+=$out1[0][$i]; } echo '<br /><br /><b>Et le total est = </b>'.$total; ?>