Debutant - Comparaison de chaine de caractère

Debutant - Comparaison de chaine de caractère - PHP - Programmation

Marsh Posté le 29-10-2005 à 12:09:03    

Hello ;)
 
J'ai du texte dans la variable $text
Normalement, elle devrait être du type "(blablabla) xyz"
Si jamais c'est le cas, je dois recuperé ce qui est entre paranthese...
J'en suis à ça comme comparaison : ^(.*).* mais je ne sais pas comment le recuperer dans une variable... (je fais du php depuis hier :d )
 
Merci :)
 
:jap:

Reply

Marsh Posté le 29-10-2005 à 12:09:03   

Reply

Marsh Posté le 29-10-2005 à 12:11:38    

preg_match
 
Mais ton masque est pas top. Pour commencer les parenthèses faut les échapper.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 29-10-2005 à 12:14:32    

Ha oui,
^[(].*[)].*
ou
^\(.*\).*
 
:??:

Reply

Marsh Posté le 29-10-2005 à 12:19:22    

La deuxième.
 
Mais il te faut aussi des parenthèses (non échappées donc) pour capturer ce que tu veux dans le masque.
 
Bref, jette un coup d'oeil à www.php.net/preg_replace. Et http://www.regular-expressions.info/ en passant.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 29-10-2005 à 12:22:01    

<?php
$subject = "(bonjour)"
$pattern = '^\(.*\).* ';
preg_match($pattern, $subject);
?>
 
Comment je peux recuperer bonjour alors ?
 
edit : : je n'avais pas vu ton message. Je vais lire les urls que tu m'as donné :)


Message édité par Sylver--- le 29-10-2005 à 12:23:37
Reply

Marsh Posté le 29-10-2005 à 13:00:26    

Bon, après avoir "tout" lu, je n'ai pas trouvé comment je pouvais faire pour recuperer dans une variable ce qui était entre paranthése...
Si je fais qqchose comme ça, ça peut marcher ?
<?php
$subject = "(bonjour)"
$pouet = '.*';
$pattern = '^\(($pouet)\).* ';
preg_match($pattern, $subject);
?>  
 
C'est peut être totalement stupide ;)
 
:jap:

Reply

Marsh Posté le 29-10-2005 à 13:30:02    

Sylver--- a écrit :

Bon, après avoir "tout" lu, je n'ai pas trouvé (...)


en fait sielfried t'as dis 2 choses :
 
1. echapper les parenthèses
2. mettre des parenthèses pour capturer le texte voulut
 
donc tu n'as pas bien tout lu ...
Edit : (en fait si qd même un peu !)
et surtout pas la doc de preg_match  :heink:  
 
il te faut un troisième paramètre qui sera la variable qui recupera ce qui a été trouvé par preg_match
donc pour l'exemple je transforme tes parenthèses en signe égal
 

Code :
  1. $matches = array();
  2. $subject = "=bonjour=";
  3. $pattern = '^=(.*)=^';
  4. if(preg_match($pattern, $subject, $matches))
  5. print_r ($matches);

et je te laisse adapter ça pour detecter les parenthèses dans ta chaine source, comprendre le rôle des parenthèses dans une regexp, et éventuellement optimiser le .*

Message cité 1 fois
Message édité par shakpana le 29-10-2005 à 13:32:33
Reply

Marsh Posté le 29-10-2005 à 14:03:28    


:jap:
Mais avant de lire ton post, j'avais en effet trouvé l'histoire des $matches. Je ne comprenais pas pourquoi ça ne marchait pas, mais il manquait le symbole ^ à la fin de mon expression regulière... je l'ai remarqué grâce à ton post :)
Mais je ne comprends pas pourquoi il faut le mettre en fin de ligne, il est bien censé modeliser le debut d'une ligne, non :??:
 
Mon code donne ça, et ça marche :)

Code :
  1. $matches = array();
  2. $subject = $liste[$j][2];
  3. $pattern = '^\((.*)\).*^';
  4. if (preg_match($pattern, $subject, $matches)) echo $matches[1];


 
Merci bien !
(mais partez pas trop loin, j'aurais ptet d'autres questions ;)
 
:jap:
 
edit : la balise code n'affiche pas les \ et si je les double il m'en affiche deux ! Joooooooooooooce  :fou:

Message cité 1 fois
Message édité par Sylver--- le 29-10-2005 à 14:05:24
Reply

Marsh Posté le 29-10-2005 à 14:15:33    

Sylver--- a écrit :

marchait pas, mais il manquait le symbole ^ à la fin de mon expression regulière... je l'ai remarqué grâce à ton post :)
Mais je ne comprends pas pourquoi il faut le mettre en fin de ligne, il est bien censé modeliser le debut d'une ligne, non :??:


oui, en fait, c'est moi qui l'ai employé à tort ...
^ indique le début du sujet, ou c'est une 'assertion' de début de ligne en mode multiligne, dixit la doc.
donc j'aurai plutôt dû faire un
$pattern = '/\((.*)\)/';
ce qui est plus général, autant pour moi ...
 

Sylver--- a écrit :

edit : la balise code n'affiche pas les \ et si je les double il m'en affiche deux ! Joooooooooooooce  :fou:


"bug" du bbCode de HFR  :(  

Reply

Marsh Posté le 29-10-2005 à 15:42:00    

Ton truc marche mais si jamais tu as une chaîne du genre :
"(blablabla) truc(chose)machin"
 
Alors ton masque te renverra "blablabla) truc(chose" et non "blablabla".
 
Pour éviter ça, remplace le .* par un [^\)]*


Message édité par sielfried le 29-10-2005 à 15:42:14

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 29-10-2005 à 15:42:00   

Reply

Marsh Posté le 29-10-2005 à 18:05:47    

ok :)
 
Merci :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed