Expressions régulières... Ouais ça fait peur !

euhkah
Invité n'ayant pas de compte PHPfrance

26 oct. 2008, 20:16

J'ai pas pour habitude de demander de l'aide, pour être honnête, je trouve d'habitude toujours réponse à mes questions sans le faire.. Mais voilà, là j'ai un problème avec ces expressions régulières, et je crois que je pourrais lire et relire mon cours des millions de fois, je n'y comprendrai jamais rien..

J'ai une chaine qui se compose comme ça :

Code : Tout sélectionner

[new]blablablablablabla[/new][search]bloblobloblobloblobloblo[/search]
Et je cherche simplement une fonction qui va me donner blablabla et une autre qui va me donner bloblobloblo..
C'est peut etre un truc qui ressemble à

Code : Tout sélectionner

strtok("/\[new\](.+?)\[\/new\]/is", "[new]blablablablablabla[/new][search]bloblobloblobloblobloblo[/search]");
? J'ai essayé ça mais j'pense pas qu'on puisse utiliser une expression régulière dans un strtok non ?

Pouvez-vous m'aider ?..

Mammouth du PHP | 959 Messages

26 oct. 2008, 20:19

Non c'est preg_match() pour les expressions régulières ;)

Invité
Invité n'ayant pas de compte PHPfrance

26 oct. 2008, 20:33

Je te remercie.
Au passage, il y'a quelqu'un qui à quelque chose de plus joli que ça ? :

Code : Tout sélectionner

$t = [new]blablablablablabla[/new][search]bloblobloblobloblobloblo[/search]; preg_match("/\[new\](.+?)\[\/new\]/is", $t), $matches, PREG_OFFSET_CAPTURE); str_replace("[new]", "", str_replace("[/new]", "", $matches[0][0]));
Parce que j'en ai marre de coder comme un pierrafeu.. Ca marche mais c'est tout moche !

Mammouth du PHP | 959 Messages

26 oct. 2008, 21:42

Tu peux peut-être regarder le fonction preg_replace() ;)

ViPHP
ViPHP | 4039 Messages

27 oct. 2008, 10:47

Et je cherche simplement une fonction qui va me donner blablabla et une autre qui va me donner bloblobloblo..

Code : Tout sélectionner

#(bla){3}#
et

Code : Tout sélectionner

#(blo){4}#
Non ? :wink:

Et sinon, pour récupérer ce qui se trouve entre [new] et [search], au cas ou, c'est toujours intéressant:
$texte = '[new]blablablablablabla[/new][search]bloblobloblobloblobloblo[/search]';
$expression = '#\[[^]]+\]([^[]+)[^]]+\][^]]+]([^[]+)#';
preg_match_all($expression,$chaine,$matches, PREG_SET_ORDER);

// pour voir ce qu'il y a dans $matches
echo "<pre>";
print_r($matches);
echo "</pre><br><br>";

echo "new: ".$matches[1]."<br>";
echo "search :".$matches[2]."<br>";
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 3607 Messages

27 oct. 2008, 15:15

Et sinon pour en rajouter un peu; un outil indispensable en ligne:
http://lumadis.be => testeur d'expression régulière en php! (+ un tuto)

euhkah
Invité n'ayant pas de compte PHPfrance

28 oct. 2008, 05:16

Merci à vous tous !

Serieux.. '#\[[^]]+\]([^[]+)[^]]+\][^]]+]([^[]+)#' ... Ca fait pas fliper ?! On dirait des insultes dans une BD..
Et le testeur ça déchire, ça m'évite de tester tout seul et de voir des messages d'erreur partout parce que je n'y comprend rien !!

Merci ;)

ViPHP
ViPHP | 4039 Messages

28 oct. 2008, 11:00

Merci à vous tous !

Serieux.. '#\[[^]]+\]([^[]+)[^]]+\][^]]+]([^[]+)#' ... Ca fait pas fliper ?! On dirait des insultes dans une BD..
Et le testeur ça déchire, ça m'évite de tester tout seul et de voir des messages d'erreur partout parce que je n'y comprend rien !!

Merci ;)
C'était pour faire peur, comme c'est halloween..

Celle-ci aurait marché tout aussi bien:
$regex = "#\[new\]([^[]+)\[/new]\[search]([^[]+)\[/search]#";
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

ViPHP
ViPHP | 4674 Messages

28 oct. 2008, 14:14

Hey :),

Et encore c'est rien, y a plus costaud comme expression régulière. Mais il n'y a rien de compliqué dans tout ça, c'est très logique. Il suffit de bien comprendre. Si ça t'intéresse, penche toi sur la théorie des langages avec les grammaires régulières, les langages réguliers et donc les expressions régulières. Tu verras que tout ça à un sens :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).

ViPHP
ViPHP | 2287 Messages

28 oct. 2008, 14:40

Hey :),

Et encore c'est rien, y a plus costaud comme expression régulière. Mais il n'y a rien de compliqué dans tout ça, c'est très logique. Il suffit de bien comprendre. Si ça t'intéresse, penche toi sur la théorie des langages avec les grammaires régulières, les langages réguliers et donc les expressions régulières. Tu verras que tout ça à un sens :).
C'est sûr qu'après la lecture de ce message on est tout de suite rassuré, et les regexp ne font plus peur du tout :langue:
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 4674 Messages

28 oct. 2008, 15:26

Uè ça va hein :-* … C'est vrai que c'est facile et même si visuellement c'est impressionnant, ça n'a rien de compliqué, c'est très logique. Et c'est une petite merveille les expressions régulières (et les automates d'une manière générale) :).
« Un handicap est le résultat d'une rencontre entre une déficience ou différence et une incapacité de la société à répondre à celle-ci. »

Hoa : http://hoa-project.net (sur @hoaproject).