Expressions régulères Help !

Signaler
Messages postés
1
Date d'inscription
dimanche 25 octobre 2009
Statut
Membre
Dernière intervention
25 octobre 2009
-
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
-
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

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

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


Cordialement,

Kohntark -
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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à ;)
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
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à ;)
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
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 -