OVH Cloud OVH Cloud

Expression rationnelles

6 réponses
Avatar
stock_fluxy
Bonsoir,

Je voudrais savoir si il existe un méta ou une classe prédéfinie pour
enlever toutes une suite de caractère ?

Je m'explique

si j'ai

$chaine = "afficheCa?maisPasCa";

existe-t-il un moyen de récupérer juste :

$chaine = "afficheCa";

J'ai essayé avec :

$chaine = ereg_replace("\?{,},"",$chaine);

mais ca marche po, il faut à tout pris lui donner une valeur minimale.

Si quelqu'un à une combine, elle est la bien venue.

++

Fluxy Smoth

6 réponses

Avatar
Olivier Miakinen

Je voudrais savoir si il existe un méta ou une classe prédéfinie pour
enlever toutes une suite de caractère ?


Un méta ? Une classe ?

Je m'explique

si j'ai

$chaine = "afficheCa?maisPasCa";

existe-t-il un moyen de récupérer juste :

$chaine = "afficheCa";


Ah... une fonction ?

J'ai essayé avec :

$chaine = ereg_replace("?{,},"",$chaine);


Beuh... y aurait pas comme un problème de nombre de guillemets, là ?

mais ca marche po, il faut à tout pris lui donner une valeur minimale.


Po compris.

Si quelqu'un à une combine, elle est la bien venue.


Bon, alors au hasard :

1) preg_replace("/?.*/", "", $chaine);
2) ereg_replace("?.*", "", $chaine);
3) preg_replace("/[?].*/", "", $chaine);
4) strcspn($chaine, "?");
5) substr($chaine, 0, strpos($chaine, "?"));
6) substr($chaine, 0, strrpos($chaine, "?"));
7) strtok($chaine, "?");
8) explode("?", $chaine)[0];

Je préfère personnellement la n°4.

Sinon, pour avoir le plaisir de chercher par toi-même la prochaîne fois,
voir <http://fr3.php.net/manual/fr/ref.strings.php>.

Avatar
Miko
si les mots sont séparés par ?

$mots= explode("?", $string)
puis
$mot1=$mots[0];

devrait le faire...

Miko
Avatar
Daedalus
Tu veux faire quoi au juste ? Récupérer tout ce qu'il y a avant le "?" ?

$chaine = "afficheCa?maisPasCa";
$chaine = preg_replace("/?.*/", "", $chaine);

Dae

Bonsoir,

Je voudrais savoir si il existe un méta ou une classe prédéfinie pour
enlever toutes une suite de caractère ?

Je m'explique

si j'ai

$chaine = "afficheCa?maisPasCa";

existe-t-il un moyen de récupérer juste :

$chaine = "afficheCa";

J'ai essayé avec :

$chaine = ereg_replace("?{,},"",$chaine);

mais ca marche po, il faut à tout pris lui donner une valeur minimale.

Si quelqu'un à une combine, elle est la bien venue.

++

Fluxy Smoth


Avatar
Sebastien Bourgasser
J'ai essayé avec :

$chaine = ereg_replace("?{,},"",$chaine);



Bonsoir,

On peut le faire avec les regexp comme vous tentiez de le faire:

<?
$chaine = "afficheCa?maisPasCa";
if(preg_match("/^(w+)?/", $chaine, $matches)) {
echo $matches[1];
}
?>

voir la doc de preg_match pour les détails. $matches est un tableau qui
contient tous les match de votre regexp.

A+

--
Sébastien Bourgasser

Avatar
loufoque
Olivier Miakinen a dit le 07/04/2005 à 23:45:

4) strcspn($chaine, "?");


strcspn() retourne un int.
Donc ça ne risque pas de donner ce qu'il veut.


8) explode("?", $chaine)[0];


les tableaux ne sont pas déréférencés.
Il faut faire list($var) = explode("?", $chaine);

Je préfère personnellement la n°4.


Le plus naturel est la 5, mais la 7 est pas mal non plus.

Avatar
Olivier Miakinen
Olivier Miakinen a dit le 07/04/2005 à 23:45:

4) strcspn($chaine, "?");


strcspn() retourne un int.
Donc ça ne risque pas de donner ce qu'il veut.


Ah oui, tu as raison. J'avais mal lu la doc.

Donc :
4bis) substr($chaine, 0, strcspn($chaine, "?"));

8) explode("?", $chaine)[0];


les tableaux ne sont pas déréférencés.
Il faut faire list($var) = explode("?", $chaine);


Je n'ai pas compris ce que tu veux dire ici. La syntaxe [] ne s'applique
pas au résultat d'une fonction ? Si c'est bien le cas, alors la solution
de Miko peut aussi contourner le problème.

<cit.>
$mots = explode("?", $string);
$mot1 = $mots[0];
</cit.>

Je préfère personnellement la n°4.


Le plus naturel est la 5, mais la 7 est pas mal non plus.


Sachant que la 4 était incorrecte, je suis d'accord avec toi.