[php] prob regex fin de motif
okuni
Messages postés
1221
Date d'inscription
Statut
Membre
Dernière intervention
-
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Alain_42 Messages postés 5361 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un soucis avec une regex, je dois récupérer des chiffres qui se trouvent en fin de motif.
voir l'exemple ici : https://lumadis.be/regex/test_regex.php?id=575
Pour les dernières lignes, il faudrait que la regex prenne tous les chiffres et pas seulement le 1er. (voir la dernière array)
par exemple, pour la ligne 10, j'ai "1" au lieu d'avoir "110"
Comment modifier ma regex ?
Merci d'avance.
J'ai un soucis avec une regex, je dois récupérer des chiffres qui se trouvent en fin de motif.
voir l'exemple ici : https://lumadis.be/regex/test_regex.php?id=575
Pour les dernières lignes, il faudrait que la regex prenne tous les chiffres et pas seulement le 1er. (voir la dernière array)
par exemple, pour la ligne 10, j'ai "1" au lieu d'avoir "110"
Comment modifier ma regex ?
Merci d'avance.
A voir également:
- [php] prob regex fin de motif
- Fin des zfe - Guide
- Easy php - Télécharger - Divers Web & Internet
- Fin du partage de compte disney + - Accueil - Streaming
- Fin de la 4g en france - Accueil - Guide opérateurs et forfaits
- Reconsidérer le traitement de vos informations à des fins publicitaires - Accueil - Réseaux sociaux
8 réponses
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]+$
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
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>';
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.
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 />'; ?>
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
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 ?
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/
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; ?>