Espace membres

Bonjour Anonyme

Inscription

Email :
Mot de passe :

Mot de passe oublié ?

Nos scripts

MySpeach

MySpeach est un chat php sans base de donnée, rapide, léger et facile à prendre en main. DEMO

MyPHPUpload

MyPHPUpload est un script d'upload sécurisé écrit en PHP. DEMO

GrapAgenda

Agenda PHP et MySQL avec comptes utilisateurs et administration. DEMO

Livre PHP

Les regex avec ereg eregi eregi_replace ereg_replace

Cours / tutoriel écrit le 17-06-2010 par sky

ereg
La fonction ereg() dont la signature est la suivante :
Booleen ereg( chaine modele,chaine texte[,tableau occurences] )
permet d'évaluer le texte passer en argument grâce au modèle (qui est une expression régulière) et stocke toutes les occurences dans un tableau passé optionnellement en paramètre. Lorsque la fonction trouve des occurences, elle renvoie true , sinon elle retourne false .

eregi
La fonction eregi() dont la signature est la suivante :
Booleen eregi( chaine modele,chaine texte[,tableau occurences] )
effectue le même travail que sa consoeur ereg() , à la différence près qu'elle n'est pas sensible à la casse (pas de différenciation minuscules/majuscules)

<?

$fp = fopen("http://www.com%6dentcamarche%2enet","r"); //lecture du fichier
while (!feof($fp))
{ //on parcoure toutes les lignes
$page .= fgets($fp, 4096); // lecture du contenu de la ligne
}

$titre = eregi("<title>(.*)</title>",$page,$regs); //on isole le titre

/* Le titre commence par <title>, puis contient n'importe quelle chaine, et se termine par </title> */

echo $regs[1];
// on retourne la premiere occurence trouvée
// Les occurences se trouvent entre parenthèses
// $regs[0] renvoie toute la chaine

fclose($fp);

?>




Les fonctions ereg_replace et eregi_replace

La fonction ereg_replace() dont la signature est la suivante :
chaine ereg_replace( chaine modele,chaine remplacement,chaine texte )
Permet de retourner la chaine texte passée en arguments avec les occurences trouvees remplacées par la chaine de remplacement.
Pour utiliser les occurences correspondant au modele dans la chaine de remplacement, il suffit d'utiliser des parenthèses dans la chaine modele, puis de faire référence à ces éléments dans la chaine de remplacement en utilisant deux signes antislash suivi d'un numéro identifiant l'élément entre 0 et 9 (les numéros sont donnés par ordre d'imbriquement, puis de gauche à droite, le zéro représente la chaine entière).
Le code suivant remplace Toto par <b>Toti Toto</b>... inutile mais formateur.

$Texte = "Bienvenue a Toto dans le mondes des expressions régulières";
$Texte = ereg_replace("To(to)","<b>\1ti \0</b>",$Texte);

Le code suivant (utilisation avancée des expressions régulières) remplace un URL par un hypertexte HTML (il remplace toute suite de caractères de ponctuations et alphanum&eacuyte;riques commençant par http:// , ou ftp:// par le même texte (sans le http://) entre balises HTML hypertexte...):

$Texte = "Bienvenue sur http://www.commentcamarche.net cher ami";
$Texte = ereg_replace("(http://)(([[:punct:]]|[[:alnum:]])*)","<a href="\0">\2</a>",$Texte);

La fonction eregi_replace() dont la signature est la suivante :
chaine eregi_replace( chaine modele,chaine remplacement,chaine texte )
effectue le même travail que sa consoeur ereg_replace() , à la différence près qu'elle n'est pas sensible à la casse (pas de différenciation minuscules/majuscules).


La fonction split()

La fonction split() possède la syntaxe suivante:

tableau split (chaîne expression, chaîne texte [, entier limite])
La fonction split() retourne un tableau à partir d'une chaine et d'une expression régulière. La limite, optionnelle permet de limiter la taille du tableau retourné. Dans ce cas le dernier élément du tableau contient le reste de la chaine. Si une erreur se produit, split retourne 0.

<?

// découpe une phrase en un tableau de mots
// on utilise split au cas ou plusieurs espaces séparent les mots
$phrase = "Ceci est une phrase avec trois espaces ici";
$tableau_mots = split(" +",trim($phrase)); // un espace ou plus

?>



La fonction sql_regcase()

La fonction sql_regcase() possède la syntaxe suivante:

chaine sql_regcase (chaine texte)

Elle retourne une expression régulière qui représente la chaine passée en paramètre sans tenir compte de la case. Chaque caractère de la chaine est representé entre crochets, avec deux caractères à l'intérieur un en majuscule et l'autre en minuscule, ou le cas échéant deux fois le même caractères. Aucune explication ne vaut un bon exemple ;)

<?

echo sql_regcase("un test"); // affiche [Uu][Nn][ ][Tt][Ee][Ss][Tt]

?>


Cette fonction permet de générer une chaine non sensible à la casse, pour les expressions régulières dans les bases de données par exemple. Dans MySQL lorsque vous utilisez la fonction REGEXP (au lieu de LIKE) la recherche est sensible à la casse. La solution est donc de générer une chaine non sensible à la casse à l'aide de sql_regcase.

<?

$motclef = sql_regcase("motclef");
$sql = "SELECT * from table WHERE champ REGEXP "[[:<:]]$motclef[[:>:]]"";
// selectionne tous les enregistrements de la table table, contenant le MOT motclef

?>



Ce document issu de CommentCaMarche.net est soumis à la licence GNU FDL . Vous pouvez copier, modifier des copies de cette page tant que cette note apparaît clairement.

Commentaires

Aucun commentaire. Soyez le premier !

Pseudo
Email
Commentaire

Merci d'écrire le code ici :