Comme vu précédemment en Javascript, les expressions rationnelles, dites communément régulières, permettent de faire des recherches d'occurences dans une chaîne.
Exemple 1 : Supprimer les accents dans une chaîne comme pour les mails du forum
<% Function noaccent(txt) ' Vire les accents dim temp,regEx temp = txt ' crée un objet RegExp Set regEx = New RegExp ' Casse ignorée regEx.IgnoreCase = True ' Recherche sur toute la chaîne regEx.Global = True ' Chars cherchés entre [ et ] regEx.Pattern = "[àâ]" ' Remplace ces chars par un a temp = regEx.REPLACE(temp,"a") ' autre masque regEx.Pattern = "[éèêë]" temp = regEx.REPLACE(temp,"e") ' etc pour les autres lettres... noaccent=temp end function %>
<? Function noaccent($txt) { // Vire les accents $temp = $txt; // Chars cherchés entre [ et ] $pattern = "[àâ]"; // Remplace ces chars par un a $temp = eregi_replace($pattern,"a",$temp); // autre masque $pattern = "[éèêë]"; $temp = eregi_replace($pattern,"e",$temp); // etc pour les autres lettres... return($temp); } ?>
Exemple 2 : Supprimer les balises HTML d'un source comme dans la page de recherche
<% Function notag(txt) ' Vire les balises dim regEx Set regEx = New RegExp regEx.Global = True ' ^ signifie "tout sauf" ' + signifie 1 car au moins regEx.Pattern = "<[^>]+>" ' remplace par vide notag = regEx.replace(txt,"") end function %>
<? Function notag($txt) { // Vire les balises // ^ signifie "tout sauf" // + signifie 1 car au moins $pattern = "<[^>]+>"; // remplace par vide return(ereg_replace($pattern,"",$txt)); } ?>
Exemple 3 : Convertir une date français <-> anglais
<% Function datefren(txt) ' date fr <-> en dim regEx Set regEx = New RegExp ' Découpe la chaîne regEx.Pattern = "(\d{1,2})/(\d{1,2})/(\d{2,4})" ' Permute les éléments datefren = regEx.replace(txt,"$2/$1/$3") end function %>
<? Function datefren($txt) { // date fr <-> en $pattern = "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})"; // Découpe la chaîne if(ereg($pattern,$txt,$regs)) // Permute les éléments return "$regs[2]/$regs[1]/$regs[3]"; } ?>
<%page%>
Eléments du Pattern (Certains raccourcis ne fonctionnent pas en PHP !)
Code
Description
\
Marque le caractère suivant comme caractère spécial ou littéral. Par exemple, "n" correspond au caractère "n". "\n" correspond à un caractère de nouvelle ligne. La séquence "\\" correspond à "\", tandis que "\(" correspond à "(".
^
Correspond au début de la saisie.
$
Correspond à la fin de la saisie.
*
Correspond au caractère précédent zéro fois ou plusieurs fois. Ainsi, "zo*" correspond à "z" ou à "zoo".
+
Correspond au caractère précédent une ou plusieurs fois. Ainsi, "zo+" correspond à "zoo", mais pas à "z".
?
Correspond au caractère précédent zéro ou une fois. Par exemple, "a?ve?" correspond à "ve" dans "lever".
.
Correspond à tout caractère unique, sauf le caractère de nouvelle ligne.
(modèle)
Correspond au modèle et mémorise la correspondance. La sous-chaîne correspondante peut être extraite de la collection obtenue, à l'aide d'Item [0]...[n]. Pour trouver des correspondances avec des caractères entre parenthèses ( ), utilisez "\(" ou "\)".
x|y
Correspond soit à x soit à y. Par exemple, "z|foot" correspond à "z" ou à "foot". "(z|f)oot" correspond à "zoo" ou à "foot".
{n}
n est un nombre entier non négatif. Correspond exactement à n fois le caractère. Par exemple, "o{2}" ne correspond pas à "o" dans "Bob," mais aux deux premiers "o" dans "fooooot".
{n,}
n est un entier non négatif. Correspond à au moins n fois le caractère. Par exemple, "o{2,}" ne correspond pas à "o" dans "Bob", mais à tous les "o" dans "fooooot". "o{1,}" équivaut à "o+" et "o{0,}" équivaut à "o*".
{n,m}
m et n sont des entiers non négatifs. Correspond à au moins n et à au plus m fois le caractère. Par exemple, "o{1,3}" correspond aux trois premiers "o" dans "foooooot" et "o{0,1}" équivaut à "o?".
[xyz]
Jeu de caractères. Correspond à l'un des caractères indiqués. Par exemple, "[abc]" correspond à "a" dans "plat".
[^xyz]
Jeu de caractères négatif. Correspond à tout caractère non indiqué. Par exemple, "[^abc]" correspond à "p" dans "plat".
[a-z]
Série de caractères. Correspond à tout caractère dans la série spécifiée. Par exemple, "[a-z]" correspond à tout caractère alphabétique minuscule compris entre "a" et "z".
[^m-z]
Série de caractères négative. Correspond à tout caractère ne se trouvant pas dans la série spécifiée. Par exemple, "[^m-z]" correspond à tout caractère ne se trouvant pas entre "m" et "z".
\b
Correspond à une limite représentant un mot, autrement dit, à la position entre un mot et un espace. Par exemple, "er\b" correspond à "er" dans "lever", mais pas à "er" dans "verbe".
\B
Correspond à une limite ne représentant pas un mot. "en*t\B" correspond à "ent" dans "bien entendu".
\d
Correspond à un caractère représentant un chiffre. Équivaut à [0-9].
\D
Correspond à un caractère ne représentant pas un chiffre. Équivaut à [^0-9].
\f
Correspond à un caractère de saut de page.
\n
Correspond à un caractère de nouvelle ligne.
\r
Correspond à un caractère de retour chariot.
\s
Correspond à tout espace blanc, y compris l'espace, la tabulation, le saut de page, etc. Équivaut à "[ \f\n\r\t\v]".
\S
Correspond à tout caractère d'espace non blanc. Équivaut à "[^ \f\n\r\t\v]".
\t
Correspond à un caractère de tabulation.
\v
Correspond à un caractère de tabulation verticale.
\w
Correspond à tout caractère représentant un mot et incluant un trait de soulignement. Équivaut à "[A-Za-z0-9_]".
\W
Correspond à tout caractère ne représentant pas un mot. Équivaut à "[^A-Za-z0-9_]".
\num
Correspond à num, où numest un entier positif. Fait référence aux correspondances mémorisées. Par exemple, "(.)\1" correspond à deux caractères identiques consécutifs.
\n
Correspond à n, où n est une valeur d'échappement octale. Les valeurs d'échappement octales doivent comprendre 1, 2 ou 3 chiffres. Par exemple, "\11" et "\011" correspondent tous les deux à un caractère de tabulation. "\0011" équivaut à "\001" & "1". Les valeurs d'échappement octales ne doivent pas excéder 256. Si c'était le cas, seuls les deux premiers chiffres seraient pris en compte dans l'expression. Permet d'utiliser les codes ASCII dans des expressions régulières.
\xn
Correspond à n, où n est une valeur d'échappement hexadécimale. Les valeurs d'échappement hexadécimales doivent comprendre deux chiffres obligatoirement. Par exemple, "\x41" correspond à "A". "\x041" équivaut à "\x04" & "1". Permet d'utiliser les codes ASCII dans des expressions régulières.
Procédures et Fonctions
Execute : matches=object.Execute(string) Renvoie une collection Matches contenant un objet Match pour chaque correspondance trouvée dans l'élément string. La valeur trouvée est dans Match.value et sa position dans Match.FirstIndex
Test : boolean=object.Test(string) Lance une recherche d'expression régulière dans une chaîne spécifiée et renvoie une valeur booléenne qui indique si une correspondance selon les critères spécifiés a été trouvée
Replace : string=object.Replace(string1, string2) Remplace par string2 le texte trouvé dans une recherche d'expression régulière sur la chaîne string1
Ereg : boolean=ereg (pattern, string [, regs]) Recherche dans la chaîne string les séquences de caractères qui correspondent au masque pattern. Si l'argument regs est précisé, les résultats seront enregistrés dans le tableau regs. $regs[1] contiendra la 1ère parenthèse capturante, $regs[2] contiendra la 2ème, etc... Utiliser Eregi pour une recherche insensible à la casse
Ereg_replace : string=ereg_replace (pattern, replace, string) Recherche dans la chaîne string les occurrences de pattern, puis les remplace par la chaîne replace et retourne la chaîne modifiée.
Si pattern contient des parenthèses capturantes, replace pourra contenir des séquences de la forme \\digit, qui seront remplacées par le texte capturé par la n-ième parenthèse capturante. \\0 correspond à la chaîne originale complète. De 0 à 9 parenthèses capturantes peuvent être utilisées. Les parenthèses peuvent être imbriquées, et leur numéro d'ordre est défini par leur parenthèse ouvrante.
Utiliser Eregi_replace pour une recherche insensible à la casse
Quelques masques utiles Si vous voulez en proposer d'autres... n'hésitez pas !
(Enlevez ^ et $ pour chercher dans une chaîne plus grande)
^http://[\w.%/?=:;+-]{5,}$ ou ^http://[A-Za-z0-9_.%/?=:;+-]{5,}$
^(http://)?[a-zA-Z0-9]+([\./]?[a-zA-Z0-9_\-]+)*$
^((.*?):\/\/)?(([^:]*):([^@]*)@)?([^\/:]*)(:([^\/]*))?([^\?#]*\/?)?(\?([^?#]*))?(#(.*))?$
URL en PHP by funky_jah ! by Goulh !
<script[^>]*>(.|\n)*</script>(\r\n)?
Pour supprimer tous les scripts d'un source Merci funky_jah !