Le 08.05.2012 12:30, Jean Francois Ortolo a écrit :
>
> Bonjour
>
> J'aurais besoin de reconnaître la chaîne de caractère : "---" dans une
> chaîne de caractères.
>
> Je pense faire celà avec la fonction preg_match().
>
> La chaîne $str ne contient jamais de caractère #.
>
> Si je fais :
>
> if(preg_match("#^---$#", $str))
Peu importe si la chaîne contient ou non des '#'. Par convention
preg_match attent une chaîne contenant une expression régulière
délimitée par un caractère quelconque (ou presque) où une des
caractères appariés comme ( ) ou { } etc. Ces caractère ne font
PAS partie de l'expression régulière.
C'est quand /l'expression régulière/ contient ce caractère de
délimitation (par exemple / - slash) que c'est embêtant et que
l'on en prend un autre.
Personnelement j'utilise toujours {} et donc :
preg_match("{^---$}", $str)
> Cette fonction va-t-elle rendre : true si ce qui est contenu dans $str,
> est uniquement la chaîne : --- , et false autrement ?
Oui ou presque, si la chaîne est ---\n (\n=fin de ligne ascii) elle
renverra 1 (et non true, mais c'est pareil pour le if) aussi.
> Ou bien, est-ce que je dois spécifier celà :
>
> if(preg_match("#\-\-\-$#", $str))
tu as oublié l'ancre ^ j'imagine.
^---$ est identique à ^\-\-\-$, tu y protège le tiret mais dans
ce contexte c'est inutile.
> Autrement dit :
>
> La fonction preg_match() , interprète-t-elle toujours son premier
> paramètre, comme une regex, et en particulier dans ce cas, la première
> syntaxe peut-elle convenir ?
ton "autrement dit" m'inquiète: ça n'a aucun rapport avec la choucroute.
Le premier paramètre de preg_match est une chaîne contenant une regexp
délimitée.
En cas de doute, il n'y a pas de mal à faire des essais (ici sous
GNU/Linux dans un terminal) :
$ cat test.php
<?php
$re = '{^---$}';
echo preg_match($re,'---'),"\n";
echo preg_match($re,"---\n"),"\n";
$re = '{^\-\-\-$}';
echo preg_match($re,'---'),"\n";
echo preg_match($re,"---\n"),"\n";
?>
$ php test.php
1
1
1
1