A.K.A.
Chaîne de caractères appelée motif (pattern) permettant de faire une recherche dans une autre chaîne de caractères
Utilité
Il existe deux types de regex
Nous utiliserons PCRE
Pour bien démarrer, nous n'allons utiliser que la fonction preg_match()
preg_match() va tester si notre regex "se trouve" dans la chaîne de caractères
// Ce code ne fonctionnera pas
if(preg_match('regex','chaine de caractères'))
die('vrai');
else
die('faux');
preg_match('/regex/','chaine de caractères');
/regex/ | voici ma regex | vrai |
/regex/ | voici ma régex | faux |
/regex/ | voici ma regexp | vrai |
/regex/ | voici ma Regex | faux |
/coucou/ | voici ma regex | faux |
preg_match('/bonjour|hello/','bonjour tout le monde');
/bonjour|hello/ | bonjour tout le monde | vrai |
/coucou|hello/ | bonjour tout le monde | faux |
/hello| bonjour/ | bonjour tout le monde | faux |
/a|b|c/ | bonjour tout le monde | vrai |
preg_match('/^bonjour/','bonjour tout le monde');
preg_match('/monde$/','bonjour tout le monde');
/^bonjour/ | bonjour tout le monde | vrai |
/monde$/ | bonjour tout le monde | vrai |
/^bonjour tout le monde$/ | bonjour tout le monde | vrai |
/^bonjour$/ | bonjour tout le monde | faux |
preg_match('/[a-zA-Z0-1]/','bonjour tout le monde');
/[a]/ | bonjour | faux |
/[ab]/ | bonjour | vrai |
/[^a-z0-9]/ | bonjour | faux |
/^[^a-z]/ | Bonjour | vrai |
preg_match('/^bonjour/i','Bonjour tout le monde');
Il est possible de spécifier le nombre d'occurences attendu
preg_match('/o{3}/','booonjour tout le monde');
/o{3}/ | booonjour tout le monde | vrai |
/o{4}/ | booonjour tout le monde | faux |
/a?/ | bonjour | vrai |
/^ba+h$/ | baaaaaah | vrai |
/a{2,4}/ | aaaaaaaaa | vrai |
/^a{2,4}$/ | aaaaaaaaa | faux |
preg_match('/(bla){2,}/','blablablabla');
/bla{2,}/ | blablablabla | faux |
/(bla){2,}/ | blablablabla | vrai |
/(bla|blo){2,}/ | blablabloblo | vrai |
/(bl[ao]+){2,}/ | blaabloooblaaaooo | vrai |
preg_match('/http:\/\//','http://google.com');
Il existe des raccourcis permettant de simplifier nos regex
preg_match('/\w-\d/','foo-10');
/\w/ | c | vrai |
/\w/ | ç | faux |
/\w/ | , | faux |
/\w/ | 3 | vrai |
/\w/ | ! | faux |
/\w-\d/ | foo-10 | vrai |
/\w-\d/ | foo-bar | faux |
/\w\s\w/ | foo bar | faux |
Il existe d'autres fonctions PHP utilisant les regex
Nous n'allons voir que preg_match_all() et preg_replace()
$matches = array();
preg_match_all('/(lo)(rem) (ipsum|dolores)/','lorem dolores',$matches);
echo '<pre>';
print_r($matches);
echo '</pre>';
Array
(
[0] => Array
(
[0] => lorem dolores
)
[1] => Array
(
[0] => lo
)
[2] => Array
(
[0] => rem
)
[3] => Array
(
[0] => dolores
)
)
// Mettre tous les 'toto' en gras
$text = 'toto tata tutu toto tete toto tata';
$text = preg_replace('/toto/','toto',$text);
// Mettre tous les 'toto' et 'tata' en gras
$text = 'toto tata tutu toto tete toto tata';
$text = preg_replace('/(toto|tata)/','$1',$text);
Terminez ce jeu : Regex Crossword