Expression régulière ou REGEX

Les REGEX servent a vérifier et a manipuler des chaînes de caractères.

 

Caractères utilisés dans la syntaxe des REGEX

+ --> 1 caractère ou plus
[] --> Les crochets définissent une liste de caractères autorisés
() --> Les parenthèses définissent un élément composé de l'expression régulière qu'elle contient
{} --> Les accolades si elles contiennent un ou plusieurs chiffres séparés par une virgule représentent le nombre de fois ou l'élément précédant les accolades peut se reproduire.
Exemple p{3,5} permet ppp, pppp ou ppppp
- --> Un moins entre deux caractères dans une liste représente un intervalle (par exemple [a-d] représente [abcd])
. --> Le caractère point représente un caractère unique
* --> 0 caractère ou plus
? --> Le caractère "point d'interrogation indique la présence éventuelle de l'élément la précédant
| --> Occurrence de l'élément situé à gauche de cet opérateur ou de celui situé à droite (lard|cochon)
^ --> Placé en début d'expression il signifie "chaîne commençant par .. " Utilisé à l'intérieur d'une liste il signifie "ne contenant pas les caractères suivants...
$ --> Placé en fin d'expression il signifie "chaîne finissant par .. "

caractères alphanumériques (équivalent à [A-Za-z0-9])
caractères alphabétiques ([A-Za-z])
chiffre ([0-9])

 

La fonction ereg() est déprécié et remplacée par preg_match()

ereg('pattern', 'string'); est maintenant remplacé par preg_match('/pattern/', 'string');

L'erreur pouvant être rencontrée sur une page web utilisant ereg() est la suivante :

0 - Call to undefined function ereg()

Vous ne pouvez pas visiter cette page car :

  1. bookmark/favori périmé
  2. Un moteur de recherche possède un listing périmé pour ce site
  3. une adresse erronée
  4. vous n'avez pas accès à cette page
  5. La ressource demandée n'a pas été trouvée
  6. Une erreur est survenue pendant l'exécution de la requête.

Veuillez essayer l'une des pages suivantes :

Si les difficultés persistent, merci de contacter l'administrateur de ce site.

Call to undefined function ereg()

 

Chercher un mot dans une chaîne de caractères avec preg_match()

<?php
if(preg_match('programmation','ABCprogrammationDEF'))
{
echo "Oui le mot programmation a été trouvé.";
} else {
echo "Non le mot programmation n'a pas été trouvé.";
}
?>

Résultat
Oui le mot programmation a été trouvé.

 

Chercher un mot dans une chaîne de caractères avec strpos()

<?php
$texte = 'La chaîne de programmation.';
$trouve = 'programmation';
$position = strpos($texte, $trouve);

// Noter l'utilisation de ===
// Un simple == ne donnerait pas le résultat attendu car la lettre 'a' est à la position 0.
if ($position === false) {
echo "La chaîne '$trouve' n'a pas été trouvée dans la chaîne '$texte'";
} else {
echo "La chaîne '$trouve' a été trouvée dans la chaîne '$texte'";
// La position $position du mot.
echo "<br />Avec la variable position le mot commence au $position ème caractère.";
}

// On peut chercher le caractère, en ignorant les 13 premiers caractères.
$newtexte = 'La chaîne de programmation.';
$ignorechar = strpos($newtexte, 'programmation', 13);
// $ignorechar = 14 également et non pas 1.
echo "<br />Avec la variable ignorechar le mot commence également au $ignorechar ème caractère.";
?>

Résultat
La chaîne 'programmation' a été trouvée dans la chaîne 'La chaîne de programmation.'
Avec la variable position le mot commence au 14 ème caractère.
Avec la variable ignorechar le mot commence également au 14 ème caractère.

 

Une REGEX pour renommer des liens

RewriteRule     ^lire/alpha-a.html                   /lire/alphabet.php?alpha=a  [L]
RewriteRule     ^lire/alpha-b.html                   /lire/alphabet.php?alpha=b  [L]
RewriteRule     ^lire/alpha-c.html                   /lire/alphabet.php?alpha=c  [L]
RewriteRule     ^lire/alpha-d.html                   /lire/alphabet.php?alpha=d  [L]
RewriteRule     ^lire/alpha-e.html                   /lire/alphabet.php?alpha=e  [L]
RewriteRule     ^lire/alpha-f.html                   /lire/alphabet.php?alpha=f  [L]
RewriteRule     ^lire/alpha-g.html                   /lire/alphabet.php?alpha=g  [L]
RewriteRule     ^lire/alpha-h.html                   /lire/alphabet.php?alpha=h  [L]
RewriteRule     ^lire/alpha-i.html                   /lire/alphabet.php?alpha=i  [L]
RewriteRule     ^lire/alpha-j.html                   /lire/alphabet.php?alpha=j  [L]

Toutes ses lignes peuvent être convertie en une seule REGEX :

RewriteRule     ^lire/alpha-([a-z]).html             /lire/alphabet.php?alpha=$1  [L]

 

Contrôler une chaîne de caractères alphanumériques

La fonction preg_match() retourne la valeur booléenne vraie si l’expression régulière correspond à la chaîne stockée dans la variable $login.

<?php
if (preg_match('/[A-Za-z]+/', $login)) {
# La variable $login contient uniquement des caractères alphanumériques.
}
else {
# Redemander la variable $login.
}
?>

 

Remplacer des chiffres par des liens qui pointent vers des images

<?php
$visites= 367801; $visites = ereg_replace("0","<img src='image/compteur/0.gif'>","$visites"); $visites = ereg_replace("1","<img src='image/compteur/1.gif'>","$visites"); $visites = ereg_replace("2","<img src='image/compteur/2.gif'>","$visites"); $visites = ereg_replace("3","<img src='image/compteur/3.gif'>","$visites"); $visites = ereg_replace("4","<img src='image/compteur/4.gif'>","$visites"); $visites = ereg_replace("5","<img src='image/compteur/5.gif'>","$visites"); $visites = ereg_replace("6","<img src='image/compteur/6.gif'>","$visites"); $visites = ereg_replace("7","<img src='image/compteur/7.gif'>","$visites"); $visites = ereg_replace("8","<img src='image/compteur/8.gif'>","$visites"); $visites = ereg_replace("9","<img src='image/compteur/9.gif'>","$visites"); echo $visites;
?>

 

Remplacer les smileys texte par des smileys image

$texte='Un texte avec un smiley :-)';
echo str_replace(':-)','<img src="/smileys/souriant.png">',$texte);

 

Convertir un texte http://www.the-next-school.com en lien cliquable

<?php
$text = "Éducation et Nouvelles Technologies : http://www.the-next-school.com<br/>www.the-next-school.com<br/>the-next-school.com";
$text = preg_replace('@([^>"])((http|https|mailto|ftp)?://[a-z0-9\./+,%#_-]+)@i', '$1<a href="/$2" alt="$2" title="$2" target=\"_new\">$2</a>', $text);
echo "$text";
?>

Résultat
Éducation et Nouvelles Technologies : http://www.the-next-school.com
www.the-next-school.com
the-next-school.com

 

Afficher le texte entre les balises de lien <a href="/">Le texte</a>.

<?php
$chainedecaracteres = "<a href=\"http://www.visionduweb.fr/annuaire\">Annuaire de Visionduweb</a><a href=\"http://www.visionduweb.fr/forum\">Forum de Visionduweb</a>";
$resultatregex = preg_replace("~<a[^>]*>([^<]+)</a>~i", '<br />$1', $chainedecaracteres) ;
echo "$resultatregex";
?>

Résultat
Annuaire de Visionduweb
Forum de Visionduweb

 

Affiche le lien présent dans l'attribut href <a href="/ICI">Texte</a>.

<?php
$analysechainetexte='Ipsum <a href="http://www.visionduweb.fr/annuaire/">Annuaire</a> ipsum <a href="http://www.visionduweb.fr/forum">Forum</a> ipsum.';
preg_match_all('`href="([^"]+)"`i',$analysechainetexte,$sortie);
echo implode('<br/>',$sortie[1]);
?>

Résultat
http://www.visionduweb.fr/annuaire/
http://www.visionduweb.fr/forum

 

Vérifier le format d'un mail

<?php
$testermail= (string)"Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.";
if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',str_replace('&amp;','&',$testermail)))
{
echo 'Le format du mail '.$testermail.' est valide.';
}
else
{
$echec."Le format de votre adresse mail est invalide. Merci de saisir une adresse mail valide.";
echo ("$echec");
}
?>

Résultat
Le format du mail Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser. est valide.

 

Masque de domaine avec ou sans www

$url_provenance = "www.visionduweb.fr";
if (eregi("^http://(www+[-])?visionduweb\.fr*", $url_provenance)) {
// Il semble que la provenance soit la bonne.
// Utiliser un masque pour la sécurité reste faillible.
// Le hacker peut toujours copier le code du formulaire puis le modifier.
// Ensuite, Avec Apache et son fichier DNS il pourra faire croire qu'il vient du bon domaine.
} else {
// ACCES INTERDIT. ORIGINE INCONNUE.
// La, c'est certain, la personne qui veut envoyer le formulaire ne vient pas du site.
}

 

Récupérer le domaine d'une URL avec preg_match()

<?php
$test_url = "http://www.visionduweb.fr:80/images/index.html";
preg_match('`^([a-z0-9]+://)?([^/:]+)(:[\d]+)?(/.*$)?`i', $test_url, $test_url_sortie);

// test_url_sortie[2] affiche www.visionduweb.fr
// La REGEX comprend 4 paires de parenthèses ().
// Le tableau retourne 4 éléments.
// Les valeurs du tableau :
// [0] => http://www.visionduweb.fr:80/images/index.html 
// [1] => http://
// [2] => www.visionduweb.fr
// [3] => :80
// [4] => /images/index.html
echo "$test_url_sortie[2]";

echo '<br/>';

// Récupérer l'adresse url d'origine du visiteur
$url_provenance = $_SERVER['HTTP_REFERER'];
preg_match('`^([a-z0-9]+://)?([^/:]+)(:[\d]+)?(/.*$)?`i', $url_provenance, $url_provenance_sortie);
// $url_provenance_sortie[2] affiche le domaine de provenance
echo "$url_provenance_sortie[2]";
?>

Résultat
www.visionduweb.fr

 

Récupérer le contenu du body

<?php
$texte = "<html><head></head><body><h1>Un titreH1</h1><p>du contenu</p><h2>Un titre H2</h2><div align=\"center\">Hello REGEX</div></body></html>";

echo("<strong>Le code d'origine à traiter</strong><br/>");
$origine = htmlentities($texte);
echo ("$origine<br/>");

if (preg_match('@<body>(.+)</body>@U', $texte, $reg1))
{
/* print"$reg1[1]"; */
echo ("<br/><strong>Le contenu du BODY</strong><br/>");
$sortie = htmlentities($reg1[1]);
echo ("$sortie<br/>");
}
else
{
echo "<br/>Ne fonctionne pas";
}
?>

Le code d'origine à traiter
<html><head></head><body><h1>Un titreH1</h1><p>du contenu</p><h2>Un titre H2</h2><div align="center">Hello REGEX</div></body></html>

Le contenu du BODY
<h1>Un titreH1</h1><p>du contenu</p><h2>Un titre H2</h2><div align="center">Hello REGEX</div>

 

Regex pour lister les mails et les liens d'une page web

<?php
/* Adresse du site à "exploiter" */
$url = 'http://www.the-next-school.com'; 
/* On récupère le contenu */
$file = file_get_contents($url);

/* Récupération des emails */
preg_match_all('`[a-zA-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+`m', $file, $emails);
/* Affichage des mails */
print_r($emails[0]);

/* Récupération des URLs */
preg_match_all('/<a[^>]+href="([^"]+)/i', $file, $urls);
/* Affichage des URLs */
echo implode('<br/>',$urls[1]);
?>

Résultat
Array ( ) /forum/lire-les-cgu/8-politique-de-gestion-des-cookies
https://www.visionduweb.fr/blog/27-sciences/the-next-school/83-the-next-school?cookie_c4565a1fa7d41ed3a3d62e4cf045a900=accepted
/forum/lire-les-cgu/8-politique-de-gestion-des-cookies
#
https://www.facebook.com/contact.bernard.bass
https://twitter.com/Visionduweb
https://plus.google.com/117927086141754979147
https://www.pinterest.fr/bass4248/
https://www.youtube.com/channel/UCBqakB8tC5PPbvjvOoUuSqg?view_as=subscriber
https://www.linkedin.com/in/visionduweb/
https://www.flickr.com/photos/85201363@N08/
https://vk.com/id463083861
skype:Visionduweb?chat
https://github.com/ZerooCool
/
#
https://www.visionduweb.fr/
/annuaire
/annuaire/musique
/blog
/forum
/forum/derniers-messages
/outils
/outils/chercher
http://visionduweb.user.fr
/outils/irc
https://redmine.visionduweb.fr
https://wiki.visionduweb.fr
/utilisateur
/utilisateur/creer-un-compte
/utilisateur/identification
/
/blog
/blog/27-the-next-school
/blog/27-sciences/the-next-school/84-chapitre-1-presentation-des-personnages
/blog/27-sciences/the-next-school/85-chapitre-2-un-paradis-terrestre-retrouve
/blog/27-sciences/the-next-school/86-chapitre-3-depopulation
/blog/27-sciences/the-next-school/87-chapitre-4-robotisation-et-absence-d-emploi
/blog/27-sciences/the-next-school/88-chapitre-5-gratuite-des-etudes
/blog/27-sciences/the-next-school/89-chapitre-6-plaisir-d-apprendre
/blog/27-sciences/the-next-school/90-chapitre-7-objets-communicants
/blog/27-sciences/the-next-school/91-chapitre-8-habitat
/blog/27-sciences/the-next-school/92-chapitre-9-l-esprit-immortel
/blog/27-sciences/the-next-school/93-chapitre-10-abolition-de-la-barriere-du-temps
/blog/27-the-next-school/84-chapitre-1-presentation-des-personnages
/blog/23-communication
/blog/16-ecologie
/blog/19-gnu-linux
/blog/17-graphisme
/blog/24-infolettre
/blog/18-joomla
/blog/29-joomla/composants
/blog/30-joomla/modules
/blog/31-joomla/plugins
/blog/15-multimedia
/blog/13-programmation
/blog/20-sciences
/blog/21-securite
/blog/22-serveur
/blog/27-the-next-school
/blog/14-windows
/component/banners/click/9
http://www.visionduweb.com
https://www.visionduweb.eu
https://www.visionduweb.fr/
http://www.visionduweb.info
#
https://www.visionduweb.fr/
/annuaire
/annuaire/musique
/blog
/forum
/forum/derniers-messages
/outils
/outils/chercher
http://visionduweb.user.fr
/outils/irc
https://redmine.visionduweb.fr
https://wiki.visionduweb.fr
/utilisateur
/utilisateur/creer-un-compte
/utilisateur/identification
/utilisateur/creer-un-compte
/utilisateur?view=remind
/utilisateur?view=reset

Il se peut que la même adresse soit affichée plusieurs fois dans le tableau.
Dans ce cas utiliser la fonction array_unique().

 

Créer une césure sur une URL

<?php
function cesure_lien($match) {
return '<a href="'.$match[1].'" target="_blank">'.substr($match[1],0,17).'...</a>';
}

$texte = 'Un lien avec une césure <https://www.visionduweb.fr/blog/13-programmation> vers une page web.<br/>Une autre césure <https://www.visionduweb.fr/blog/13-programmation> vers une autre page.';
$motif='`<((https?|ftp)://\S+)>`';

// Afficher un lien avec une césure : http://www.visi...
echo preg_replace_callback($motif,'cesure_lien',$texte);
?>

Résultat
Un lien avec une césure https://www.visio... vers une page web.
Une autre césure https://www.visio... vers une autre page.

Exemple de motif pour faire une césure de liens en bbcode.
$motif='`\[url]([^[]+)\[/url]`';

 

Bibliographie

Valider les expressions régulières : ICI
Exemples d'expressions régulières : ICI
Discussions sur les REGEX archives de Développez : ICI
Tutoriel sur les REGEX par g-rossolini de Développez : ICI

La sagesse du futur, celle qui évitera le suicide de l'humanité, ne consistera plus à gagner du temps mais à le remplir, à le vivre, à en prendre toute la mesure.
[Jacques Attali]

Visionduweb - La Réponse Collaborative - 2002 / 2019

Condition d'utilisation du site Visionduweb

Vous êtes soumis au règlement suivant et à ce titre ni l'administrateur ni l'hébergeur ne pourraient ni ne seraient tenu pour responsable de vos actes.
Vous ne devez en aucun cas utiliser les informations présentes sur Visionduweb pour nuire à autrui ou à un système informatique.

La licence CC BY-NC-ND 4.0 est attribuée au contenu rédigé par Visionduweb sur les domaines suivants :
www.visionduweb.com www.visionduweb.eu www.visionduweb.fr www.visionduweb.info

Les profils utilisés par Visionduweb : Anonymous, Visionduweb, Zer00CooL

Le serveur et les services sont accessibles.
------------------------------------
------------

Chercher dans ce site

Menu de connexion