phpInfo.netLes ArchivesLes éléPHPants

  
  Accueil
  Trucs & Astuces
  Scripts
  Regex
  Annuaire
  Articles

.
      
 Exemples d'expressions régulières (REGEX)


Infos d'un tag <a ...>...</a>[30-06-2002]


function link_extract($str)
{
    if (
ereg("(<a href=\"([a-zA-Z\.]{1,})\".+>([a-zA-Z]{1,})</a>)?", $str,$out))
        return(array(
$out[2],$out[3]);
}
$n = link_extract('<a href="foo.html" class=topnav target=_blank>bar</a>');
print_r($n);


Regex qui permet d'extraire la destination et la valeur d'un lien html. [Merci à anger]

Saisie de lien facile[23-02-2002]


$lien
= "[LIEN url=http://www.phpinfo.net/]Cliquez ici[/LIEN]";
echo
preg_replace('/(\[LIEN url=)([^\]]*)\](.*?)(\[\/LIEN\])/', "<A href='\\2'>\\3</A>", $lien);


Crée un lien cliquable à partir d'un système de tags particulier, différent du HTML classique. [Merci à Laurent aka LPA]

Supprimer les caractères non-imprimables[30-01-2002]


$chaine
= preg_replace("/\\x0|[\x01-\x1f]/U","",$chaine);


Cette regex permet de supprimer dans une chaîne les 32 premiers caractères de la table ASCII, ceux qui ne sont pas imprimables (escape, retour chariot, etc...). [Merci à Sémhur]

Espace insécable devant ; : ! ?[06-11-2001]


$texte
= eregi_replace("([ ]*)([?!:;]{1})", "&nbsp;\\2", $texte);


Cette expression régulière insère un espace insécable devant les ponctuations doubles ( ; : ! ? ) dans un texte. Pour ceux qui en ont assez de voir des ? se balader en début de ligne.

Remplacer [u...u] par <U>...</U>'[08-07-2001]


echo preg_replace("/(\[u)(.*?)(u\])/", "<U>\\2</U>", "Petit [utexteu] à [umodifieru].");


Cette regex permet d'adopter son propre système de balisage lors de la saisie d'un texte puis de le convertir ensuite en un balisage standard HTML.

Rendre des @ email 'cliquables'[05-07-2001]


$texte
= eregi_replace("([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)",
                       
"<A HREF=\"mailto:\\1\">\\1</A>", $texte);


Cette regex prend toutes les adresses email contenues dans un texte (du type nom.prenom@domaine.com par exemple et les transforme en liens mailto: cliquables. [Merci à Antoine Drochon]

Extraire seulement le nom du serveur d'une URL[29-06-2001]


$serveur
= ereg_replace("(http://[^/]*/)(.*)", "\\1", $url);


Ne conserve d'une url que le nom du serveur. Exemple : http://www.phpinfo.net/test/index.php3 donne http://www.phpinfo.net/.

Déterminer l'extension d'un fichier[13-03-2001]


ereg
("\.([^\.]*$)", $fichier, $elts);
echo
$elts[1];


Récupère dans le tableau $elts la chaîne suivant le dernier . de $fichier, ou une chaîne vide s'il n'y a pas de point.

Présence d'un mot dans une url[16-01-2001]


$contient
=
  
eregi("^(http[s]?\:\/\/)(.*\.?phpinfo\.?[A-Za-z0-9_.-]*\.[A-Za-z]{2,3})(.*)$", $url, $regs);


Indique si une url contient un mot ou non (phpinfo dans l'exemple). Dans l'affirmative, voici le résultat :
$regs[1] : http:// (https:// si tel avait été le cas)
$regs[2] : www.phpinfo.net
$regs[3] : /?p=prog&rub=regex (ou rien si l'url est du genre http://www.phpinfo.net)
[Merci Flyounet pour cet envoi]

S'agit-il d'un Code Postal ? [2ème version][05-01-2001]


$is_CP
= ereg("^((2[A-B])|([0-9]{2}))[0-9]{3}$", $chaine);


Parce que j'avais oublié de traiter le cas des CP corses voici la correction apportée par Romuald. Mais on me dit aussi que ce type de représentation n'est pas 'standard'. A vous donc de choisir entre la v1 et la v2 !

Extraire le dernier élément d'un nom de domaine[03-12-2000]


$chaine
= "www.phpinfo.net";
echo
ereg_replace("^(.*)\.(.*)$", "\\2", $chaine);


Cette regex retourne en fait le texte se trouvant après le dernier point dans la chaîne.

Bannir des mots d'un texte[29-11-2000]


$blurb
= "@!#$";
$message = "Mais où est passée la clé de la maison.";
$bannir = "mais|clé";
echo
preg_replace("/(^|[^a-zA-Z])($bannir)([^a-zA-Z]|$)/si", '\\1'.$blurb.'\\3', $message);


Remplace dans le message tous les mots à bannir ('mais' et 'clé') par le blurb mais laisse intacts les mots contenant des mots à bannir (maison par exemple). Elle est un peu compliquée celle-là, mais elle fonctionne très bien ! [Merci une nouvelle fois à Fred]

Ne garder que le corps d'un fichier HTML[28-11-2000]


$body
=
eregi_replace('(^.*<html[^>]*>.*<body[^>]*>)|(</body[^>]*>.*</html[^>]*>.*$)', '', $texte);


Cette regex extrait le texte compris entre les balises <HTML>...<BODY> et </BODY></HTML>. [Merci à Fred]

MySQL et les regex[15-11-2000]

SELECT * FROM newsletter WHERE email REGEXP '(pierre|paul|jacques)';

MySQL sait aussi utiliser les expressions régulières. Cette requête recherche tous les enregistrements dont l'email comprend 'pierre', 'paul', ou 'jacques'. [Merci à Fred]

Convertir une date MySQL en date jj/mm/aaaa ... en 1 seule ligne ![15-11-2000]


$date
= ereg_replace('^([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})$', '\\3/\\2/\\1', $date_mysql);


La même chose que précédemment, mais cette fois-ci les occurrences sont directement récupérées pour reconstruire la date. [Merci à Fred]

Convertir une date MySQL en date jj/mm/aaaa[08-11-2000]


ereg
("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date_mysql, $tJour);
$date = $tJour[3].'/'.$tJour[2].'/'.$tJour[1];


Décompose les éléments de la chaîne en 3 parties (année, mois, et jour), les place dans un tableau. Ce tableau est ensuite réorganisé pour fabriquer la date au bon format.
Un explode ou un DATE_FORMAT auraient bien sûr été préférables, mais cette regex est un très bon exemple de récupération des éléments d'une chaîne dans un tableau.

Supprimer les balises HTML[07-11-2000]


$chaine
= ereg_replace("<[^>]*>", "", $chaine);


Remplace toutes les occurrences de <quelquechose qui ne contient pas de signe 'supérieur'> par rien. Oui, un strip_tags() aurait fait la même chose, mais là on veut s'amuser avec les Regex !

Rendre cliquable un texte entre < et >[06-11-2000]


$chaine
= eregi_replace("<([^>]*)>", "<A HREF=\"\\1\" TARGET=\"_blank\">\\1</A>", $chaine);


C'est le principe utilisé par Phorum pour permettre la saisie d'URLs dans les messages sans pour autant autoriser les balises HTML.

Mettre des mots entre crochets en gras[05-11-2000]


$chaine
= eregi_replace("\[([^]]*)\]", "<b>\\1</b>", $chaine);


Met en gras tous les mots d'un texte placés entre [ et ] et retire ces 2 caractères.
'Bonjour [Bob] et [Bill]' devient 'Bonjour Bob et Bill'.

Login correct ?[05-11-2000]


$is_login
= ereg("^[a-zA-Z][a-zA-Z0-9]{3,19}$", $chaine);


Un login ne peut pas commencer par un chiffre, n'est constitué que de chiffres et de lettres, fait de 4 caractères mini à 20 caractères maxi.

Remplacer les espaces multiples par des espaces simples[24-09-2000]


$chaine
= ereg_replace("[ ]{2,}", " ", $chaine);


Toutes les séquences de 2 espaces consécutifs ou plus sont remplacées par un espace unique.

S'agit-il d'un Code Postal ?[23-09-2000]


$is_CP
= ereg("^[0-9]{5}$", $chaine);


Code d'exactement 5 chiffres sans autres caractères.

Tester si une chaîne est alphanumérique[23-09-2000]


$is_alpha
= ereg("^[0-9A-Za-z]+$", $chaine);
  
// ou
$is_alpha = ereg("^[[:alnum:]]+$", $chaine);


Des Chiffres et des Lettres uniquement ...

Rendre des URLs cliquables[20-08-2000]


$chaine
= eregi_replace("([[:alnum:]]+)://([^[:space:]]*)([[:alnum:]#?/&=])",
"<A HREF=\"\\1://\\2\\3\" TARGET=\"_blank\">\\1://\\2\\3</A>",$chaine);


Rend cliquable toutes les chaînes du type http://..., ftp://..., mailto://..., etc, contenues dans un texte.

Nettoyer une chaîne[21-05-2000]


$chaine
= eregi_replace("[^a-z0-9]", "", $chaine);


Remplace dans une chaîne tous les caractères non-alphanumériques par 'rien'.

Synseo