Expressions régulères Help !

rem693 Messages postés 1 Date d'inscription dimanche 25 octobre 2009 Statut Membre Dernière intervention 25 octobre 2009 - 25 oct. 2009 à 02:03
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 28 oct. 2009 à 20:53
Bonjour à tous,
Comme vous pouvez le voir je suis nouveau sur le forum car j'ai besoin d'aide, je m'explique.
Je dispose d'une variable qui contient une chaine de caractère :

FullTiltPokerGame#15547542203:SatellitetotheDailyDollar(114004366),Table1-15/30-NoLimitHold'em-9:38:45ET-2009/10/24
|Seat1:welderbird(625)
|Seat2:Rcon1(4,435)
|Seat3:Fz3ro(440)
|Seat4:Toggy01870(2,025),issittingout
|Seat5:jacek3282(1,500)
|Seat6:g1nac(750)
|Seat7:exel2007(635)
|Seat8:AnilM(225)
|Seat9:mikstas(50)


Mon but est de retrouver les noms des personnes en rouge situer entre :
Seat1:, Seat2:, Seat3:,... et (chiffre) avec la fonction preg_match_all.
J'ai essayer pas mal de masque mais les expressions régulière sont difficile a comprendre, je suis dans le flou
Si quelqu'un pourrait m'aider a créer un masque qui fonctionne.

Merci d'avance

5 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
25 oct. 2009 à 10:26
Salut,

Peut être avec quelque chose du genre :
<?php
$regex = '`^\|.*:([^(]*)\(`m';
?>


Cordialement,

Kohntark -
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
28 oct. 2009 à 18:14
Salut,

Juste pour essayer de faire un peu plus performant (en étant plus précis), pour un gain de 50% :
<?php
$regex='`^\|Seat[0-9]+([^\(]*)\(`m';
?>


--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 oct. 2009 à 19:45
Salut Neige,

N'étant pas sur de l'invariabilité du "seat" j'étais resté volontairement large.
Préciser au max une regex est toujours une bonne chose. Par contre je suis bien loin d'un gain de 50% chez moi :
Sur 100000 itérations :
- 1.502 s pour la regex permissive
- 1.256 s pour celle correctement bornée

et pi t'as oublié un ":"
<?php
$regex='`^\|Seat[0-9]+:([^\(]*)\(`m';
?>


Cordialement,

Kohntark -
0
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
28 oct. 2009 à 20:23
Oh ben je sais pas, j'ai testé sur lumadis.be
Maintenant, ça dépend peut-être de la version de PHP et de PCRE, selon que des optimisations ont été faites ou pas.

Effectivement, j'ai considéré que toutes les lignes concernées commençaient par Seat. Une sorte de logique qui s'est installée dans mon esprit me disant qu'un joueur, dont on cherche le nom, risquait d'être assis à un siège, comme tous les autres, et qu'il n'y avait pas de raison qu'un plus particulièrement ne le soit pas...
Cela dit, comme je l'ai dit dans un autre post, quand on cherche une regex, il faut toujours donner un maximum de détails sur le texte cherché, le texte dans lequel on cherche, etc. Sinon, ben on fait au mieux avec ce qu'on a ^^

P.S. : Au temps pour moi pour l'oubli ^^

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
0

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

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
28 oct. 2009 à 20:53
Arf, j'étais passé très loin de la signification de la chaîne et donc de son rapport avec le poker. Aucun risque alors de tester le seat.

Cordialement,

Kohntark -
0
Rejoignez-nous