Debutant - Comparaison de chaine de caractère - PHP - Programmation
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.
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.
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é
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
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
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 :
|
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 .*
Marsh Posté le 29-10-2005 à 14:03:28
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 :
|
Merci bien !
(mais partez pas trop loin, j'aurais ptet d'autres questions
edit : la balise code n'affiche pas les \ et si je les double il m'en affiche deux ! Joooooooooooooce
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 |
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 |
"bug" du bbCode de HFR
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 [^\)]*
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 )
Merci