Les chaines
L’échappement en double guillemet
| Caractère | Description |
| n | Nouvelle ligne (LF,0x0a) |
| r | Retour à la ligne |
| t | Tabulation horizontale |
| $ | Symbole dollar |
| » | Symbole des guillemets doubles |
| [0-7]{1-3} | Permet de rechercher une séquence à caractères octal |
| x[0-9A-Fa-f]{1,2} | Permet de rechercher une séquence à caractères hexadécimal |
echo "\x65"; //affichera e echo "\101"; //affichera A
Les opérateurs
Rappel : l’opérateur de concaténation est le « . »
{} et [] sont utilisés pour accéder à un caractère de la chaîne en donnant sa position.
Attention : les {} ne seront plus utilisé en PHP6
$chaine = 'abcde'; for($i=0;$i<5;$i++) echo $chaine[$i];
Les fonctions de comparaison
Il existe deux manières de comparer des chaînes :
- sensible à la casse
- insensible à la casse
Les fonctions de comparaison de chaînes font partis de la famille str*cmp
- strcmp()
- strcasecmp() insensible
- strncmp()
- strncasecmp() insensible
strcmp()
Les valeurs de retours sont :
- -1 signifiant que la première chaîne est plus petite
- 1 signifiant que la première chaîne est plus grande
- 0 signifiant que la première chaîne est identique
strncmp()
Va retourner true ou false
$chaine1 = 'Azerty'; $chaine2 = 'azerty'; var_dump(strcmp($chaine1,$chaine2)); // int(-1) var_dump(strcasecmp($chaine1,$chaine2)); // int(0) $chaine3 = 'Zend_php'; $chaine4 = 'Zend'; var_dump(strncmp($chaine3,$chaine4,4)); // int(0) var_dump(strncmp($chaine3,$chaine4,6)); // int(2) var_dump(strncmp($chaine4,$chaine3,6)); // int(-2) var_dump(strncasecmp($chaine3,$chaine4,4)); // int(0) var_dump(strncasecmp($chaine3,$chaine4,6)); // int(2)
Les fonctions de recherche
| Sensible | Insensible |
| strpos() | stripos() (PHP5) |
| strstr() retournera une sous chaîne a partir d’un caractère | stristr() |
$chaine = 'La Terre du milieu est au centre'; echo strpos($chaine,'milieu'); // affichera 12; echo stripos($chaine,'Milieu'); //affichera 12;
En utilisant ses fonctions, il faut tester avec === ou !== car si la comparaison est fausse, elle retournera toujours false
substr() retournera une sous chaîne a partir d’un index en fonction d’un nombre de caracteres.
echo substr($chaine,-9); // affichera "au milieu" echo substr($chaine,3,15); //affichera "Terre du milieu"
Pour compter le nombre de caractère d’une chaîne, on doit utiliser strlen
ATTENTION : count($chaine) = 1 strlen($chaine) = x
Les fonctions de remplacement
| Sensible | Insensible |
| str_replace( remplacer quoi? , remplace par , dans ) remplace une sous chaîne dans une chaine | str_ireplace |
| substr_replace on peut remplacer une proportion de chaîne | substr_ireplace |
$chaine = "La Terre du milieu est au centre"; $a1 = array("Terre","milieu","centre"); $a2 = array("bla","foo","bar"); echo str_replace($a1,$a2,$chaine); // La bla du foo est au bar
Les fonctions de formatage
Il est possible de modifier le format d’une chaîne.
| Fonctions | Description |
| number_format( valeur , arrondi , nouveau separateur , ancien separateur) | retourne une chaine formatée |
| sprintf( ) | voir en dessous |
| strtok ( $chaine, $sep ) | Coupe une chaîne en segments |
$chaine = "12.5787"; //format francais var_dump(number_format($chaine,2,',','.')); // (string) 12,58
sprintf($format , $arguments, $flags
sprintf
Retourne une chaîne formatée avec le format donné $format en fonction des arguments donnés $arguments. la chaine de format est composé de 0 à n directives. Certaines chaines seront remplacées sauf le % qui est une chaîne non autorisée. Chaque spécification de conversion est constituée de la valeur % suivie d’un ou plusieurs éléments dans l’ordre suivant :
Un spécificateur dépassement qui va spécifier l’espace,
d’un remplisseur (optionnel),
d’un spécificateur d’alignement,
un spécificateur de précision,
un spécificateur de type (obligatoire)
ATTENTION, en php4, la chaîne de format supporte le numérotage et l’échange d’arguments.
A voir aussi
A VOIR IMPÉRATIVEMENT
- trim et ses derivés (ltrim, rtrim)
- strip_tags
- strip_slashes
- htmlentities
- htmlspecialchars
Expression régulières
Une expression régulière est un outil puissant et flexible permettant de rechercher, de manipuler du texte. En PHP il existe deux extensions pour les manipuler :
- ereg() : qui permet de manipuler des expressions régulieres POSIX (UNIX).
ATTENTION : A ne plus utiliser car supprimé en PHP6 - preg() : compatible PEARL
Syntaxe
L’expression régulière doit comporter des délimiteurs : / ,
des délimiteurs alternatifs : | ,
classe de caractères : (voir ci dessous) ,
des quantificateurs : (voir ci dessous),
des ancres.
if(preg_match('/foo|baz/','foobar')) echo 'foo';
Classe de caractères prédéfinis
- d nombre 0-9
- D tout sauf 0-9
- w toutes lettre et _
- W tout ce qui n’est pas lettre et _
- s tout espaces
- S tout sauf espaces
- . tout sauf nouvelle ligne
- b limite de mot (w + s)
- B pas limite de mot
- A début de la chaîne sujet (indépendant du mode multi-lignes)
- Z fin de la chaîne sujet ou nouvelle ligne à la fin de la chaîne sujet (indépendant du mode multi-lignes)
- G position de la première occurrence trouvé dans la chaîne sujet
- z fin de la chaîne sujet (indépendant du mode multi-lignes)
Classe de caractères
| Expression | Exemple | Description |
| [] | [azerty] | liste de caractères |
| [x-y] | [5-7], [A-Z] != [a-z] | délimiteur |
| [^car] | [^a-z0-9],[^^] | interdiction |
Remarque : pour échapper des caractères spéciaux, il faux les échapper.
Quantificateurs
- ? = 0 ou 1 fois
- * = 0 ou plusieurs fois
- + = 1 ou plusieurs fois
- {n} = n fois
- {,n} = au moins n fois
- {m,} = m ou plusieurs fois
- {m,n} = entre m et n fois
if(preg_match('/\d{0,4}/','1998')) echo 'ok'; else echo 'non';
Les ancres
- ^ : la chaîne doit commencer par ce que l’on cherche
- $ : la chaîne se termine par ce que l’on cherche
Sous expression
A l’intérieur d’une expression, on peut créer des sous expressions qui seront définies par ( expression )
Il est possible de faire référence à la sous-expression. Pour faire une référence à la sous expression, on devra utiliser le caractère d’échappement + sa position (la première place commençant par 1)
$chaine = '55'; if(preg_match('/(\d)\1/',$chaine)) echo 'ok'; else echo 'non'; //affichera ok
Les options
On peut spécifier des modificateurs de pattern (expression reguliere) qui se placent apres le pattern ‘/pattern/modificateur’
| Modificateur | Description |
| u | unicode |
| i | insensible |
| s | retour chariot |
$chaine = '5Azerty5azerty'; $pattern ='/(\d)([a-z]+)\1\2/i' ; if(preg_match($pattern,$chaine)) echo 'ok'; else echo 'non';
Fonction preg_match
preg_match( $pattern, $chaine [,$tabReponse] ) permet de vérifier une expression réguliere.
Le tableau $tabReponse est le résultat des parenthese capturante sous forme de tableau avec le resultat en index 0.
Fonction preg_match_all
Contrairement à preg_match qui ne retourne que la premiere ocurrence trouvée, preg_match_all, récuperera toute les autres valeurs.
Fonction preg_replace
preg_replace ( $pattern, $replace, $chaine [,$limite_remplacement, $compteur_chaine_remplacée] ). La fonction permettra de remplacer une chaine recherchée par rapport à une autre.
Fonction preg_split
preg_split( $pattern , $chaine ) équivaut à un explode avec une expression réguliere.

Commentaires récents