Archives / Expression Régulières
Postée le 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]
Postée le 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]
Postée le 30-01-2002
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]
Postée le 06-11-2001
$texte = eregi_replace("([ ]*)([?!:;]{1})", " \\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.
Postée le 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.
Postée le 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]
Postée le 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/.
Postée le 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.
Postée le 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\r\n$regs[3] : /?p=prog&rub=regex (ou rien si l'url est du
genre http://www.phpinfo.net)
[Merci Flyounet pour cet envoi]
Postée le 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 !
Postée le 03-12-2000
$chaine = "www.phpinfo.net";
echo ereg_replace("^(.*)\.(.*)$", "\\2", $chaine);
$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.
Postée le 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]
Postée le 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]
Postée le 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]
Postée le 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]
Postée le 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.
Postée le 07-11-2000
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 !
Postée le 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.
Postée le 05-11-2000
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'.
Postée le 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.
Postée le 24-09-2000
Toutes les séquences de 2 espaces consécutifs ou plus sont remplacées par un espace unique.
Postée le 23-09-2000
$is_CP = ereg("^[0-9]{5}$", $chaine);
Code d'exactement 5 chiffres sans autres caractères.
Postée le 23-09-2000
$is_alpha = ereg("^[0-9A-Za-z]+$", $chaine);
// ou
$is_alpha = ereg("^[[:alnum:]]+$", $chaine);
Des Chiffres et des Lettres uniquement ...
Postée le 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.
Postée le 21-05-2000
Remplace dans une chaîne tous les caractères non-alphanumériques par 'rien'.
Cette page fait partie des Archives de phpinfo.net (période 2000-2002).
Les liens externes, mais aussi internes, n'ont pas été maintenus.
D'autre
part, gardez à l'esprit que les informations proposées ont pu perdre de
leur pertinence, compte tenu de l'évolution rapide de PHP depuis leur
1ère mise en ligne.