This page has been robot translated, sorry for typos if any. Original content here.

Quelques exemples d'expressions régulières

Par sujet:


La chaîne est-elle un nombre comportant jusqu'à 77 chiffres:

  if (ereg ("^ [0-9] {1.77} $", $ chaîne)) echo "oui";  sinon echo "non"; 

Si la chaîne est composée uniquement de lettres, de chiffres et de "_", de 5 à 20 caractères:

  if (ereg ("^ [a-za-za0-9 _] {5.20} $", $ chaîne)) echo "oui";  sinon echo "non"; 

Y at-il des caractères dans la chaîne sauf ceux valides? Les lettres, chiffres et "_" sont considérés comme valides. La longueur ne peut pas être vérifiée ici, sauf s’il s’agit simplement d’une condition supplémentaire strlen ($ string). Ne confondez pas avec l'exemple précédent - bien que le résultat soit le même, mais que la méthode soit différente, "par contradiction"

  if (! ereg ("[^ a-zа-я0-9 _]", $ string)) 
  echo "pas de lettres étrangères (OK)"; 
 sinon 
  echo "il y a d'autres lettres (FALSE)"; 

Pour une comparaison indépendante du cas, utilisez ereg i ().

Y at-il des caractères consécutifs dans la chaîne, au moins 3 caractères à la suite (comme "abvgDDDee", mais pas "aabbaabb"):

  if (preg_match ("/ (.) \\ 1 \\ 1 /", $ string)) echo "yes";  sinon echo "non"; 

Remplacez partout dans le texte LINE1 par LINE2 (le problème est résolu sans expressions régulières):

  $ string = str_replace ("STRING1", "STRING2", $ string); 

Remplacez les courbes des codes de saut de ligne par des normales: pour cela, il vous suffit de supprimer "\ r".

Les transitions sont normales (mais différentes!): "\ N" ou "\ r \ n".

Il existe également des problèmes tels que "\ r \ r \ n".

  $ string = str_replace ("\ r", "", $ string); 

Remplacez tous les espaces répétés par un. N'essayez pas d'utiliser str_replace ici, c'est une bonne fonction, mais pas pour cet exemple.

  $ string = preg_replace ("/ XX + /", "X", $ string);  // au lieu de X mettez un espace 

Il y a quelques mots dans le texte, disons «WORD» et «LYALYA» (etc.), qui doivent être remplacés de la même manière par les mêmes, mais par des additifs.

Peut-être que les mots manquent ou apparaissent plusieurs fois dans tous les cas.

C'est à dire s'il y avait un "mot" ou un "mot" (ou quelque chose d'autre), vous devez le remplacer par "<b> mot </ b>" ou "<b> mot" </ b> "(selon la façon dont il était).

En d'autres termes, vous devez rechercher une liste de mots dans n'importe quel registre et insérer des lignes fixes (sur "<b>" et "</ b>") le long des bords des mots trouvés.

  $ string = preg_replace ("/ (word1 | word2 | laja | word99) / si", " \\ 1 ", $ string); 

Recherchez le texte inclus dans une balise, par exemple <TITLE> ... </ TITLE> à partir d'un fichier HTML ( $ string est le texte source).

  if (preg_match ("!! si", $ string, $ ok))
  echo "Balise trouvée, texte: $ ok [1]";
 sinon
  echo "Tag introuvable"; 

Recherchez le texte contenu dans une balise et remplacez-la par une autre, par exemple: <TITLE> ... </ TITLE> remplacez de la même façon par <MY_TEG> ... </ MY_TEG> dans le fichier HTML:

  preg_replace ("! ! si "," <MY_TEG> \\ 1 МОЙ_ТЕГ>  ", $ string); 

Mise en évidence du code PHP dans les messages

Par exemple, vous avez un forum comme vBulletin, où vous pouvez surligner le code, si vous le sélectionnez spécifiquement: [PHP] n’importe quel code [/ PHP] .

En conséquence, après cela (lors de l'affichage du message), vous obtenez un code php beau et coloré.

Et donc, si vous voulez que tous les morceaux entre [PHP] .. [/ PHP] et <? ..?> Soient perçus comme du code et colorés, alors cela peut être fait assez facilement.

Le texte du programme.

 <?

 // message d'origine:
 // ---------------------------------------------------- ------
 $ str = '
 Pamagite ne fonctionne pas du tout!  Voici un exemple:
 [php]
 // commenter
 # commentaire
 phpinfo ();
 [/ php] 

 Lyalya Lyalya 

 [php]
 pour ($ i = 0; $ i <100; $ i ++) {
 ping ("- f", "www.ru");
 }
 [/ php]
 <? 
 echo "<a href=http://shram.kiev.ua/> cliquez ici! </a>";
 phpinfo (); 
 ?>
 ';
 // ---------------------------------------------------- ------

 // supprime les avertissements (il y a des problèmes dans highlight_string) 
 error_reporting (0);

 // fonction de surlignage d'un morceau de texte
 fonction _mon _ ($ s, $ a1, $ a2) {
  if ($ a1! = "<?") {$ a1 = "<?";  $ a2 = "?>";  }
  $ s = str_replace ("\\\" "," \ "", $ s);
  ob_start ();
  highlight_string ($ a1. $ s. $ a2);
  $ s = ob_get_contents ();
  ob_end_clean (); 
  retourne $ s;
 }

 // cherche tous les morceaux dans le texte entre <? ... ou [PHP] ...
 $ str = preg_replace ("! (\ [php \] | <\?) (. *?) (\ [/ php \] | \?>)! ise", "_ mon _ ('\\ 2', '\ \ 1 ',' \\ 3 ') ", $ str);

 echo $ str;

 ?>

Après un tel programme sur l'écran est:

Pamagite ne fonctionne pas du tout! Voici un exemple: <?
// commenter
# commentaire
phpinfo ();
?> lala lala lala <?
pour ( $ i = 0 ; $ i < 100 ; $ i ++) {
ping ( "-f" , "www.ru" );
}
?> <?
echo "<a href=http://shram.kiev.ua/> cliquez ici! </a>" ;
phpinfo ();
?>

Comme vous pouvez le constater, tout ce qui se trouvait entre les lignes spéciales a été mis en surbrillance et le texte étranger n'a pas changé du tout. Si vous souhaitez postuler pour le forum, pensez aux transitions vers de nouvelles lignes.

Si vous avez un message entier - il s'agit d'un code solide, utilisez directement la surbrillance_chaILLE, sans rechercher <? ..?> Dans le code ...

Validation d'URL

Cette fonction provient de la source de discussion.

Il supporte tout ce qui peut être dans l'URL ...

Rappelez-vous que vous devez non seulement vérifier, mais aussi prendre une nouvelle valeur

de fonction parce que Elle ajoute "http: //" en cas d'absence.

  // add.  fonction pour supprimer les caractères dangereux
 fonction pregtrim ($ str) {
  return preg_replace ("/ [^ \ x20- \ xFF] /", "", @ strval ($ str));
 }
 //
 // vérifie l'URL et retourne:
 // * +1 si l'URL est vide 
 // if (checkurl ($ url) == 1) echo "vide"
 // * -1 si l'URL n'est pas vide, mais avec des erreurs
 // if (checkurl ($ url) == - 1) echo "erreur"
 // * chaîne (nouvelle URL) si l'URL est trouvée et analysée
 // if (checkurl ($ url) == 0) echo "tout va bien"
 // ou if (strlen (checkurl ($ url))> 1) echo "tout va bien"
 //
 // S'il n'y avait pas de protocole dans l'URL, il sera ajouté ("http: //")
 //
 fonction checkurl ($ url) {
  // on coupe les caractères de gauche et les espaces extrêmes
  $ url = trim (pregtrim ($ url));
  // si vide - quitte
  if (strlen ($ url) == 0) renvoie 1;
  // vérifie l'exactitude de l'URL
  if (! preg_match ("~ ^ (? :( ?: https? | ftp | telnet): // (?: [a-z0-9_-] {1.32} ".
  "(? :: [a-z0-9 _-] {1.32})? @)?)? (? :( ?: [a-z0-9 -] {1,128} \.) + (?: com | net | ".
  "org | mil | edu | arpa | gov | biz | info | aero | inc | nom | [az] {2}) | (?! 0) (? :( ? ".
  "! 0 [^.] | 255) [0-9] {1,3} \.) {3} (?! 0 | 255) [0-9] {1,3}) (?: / [A -z0-9., _ @% & ".
  "? + = \ ~ / -] *)? (?: # [^ '\" & <>] *)? $ ~ i ", $ url, $ ok))
  return -1;  // si pas correct - exit
  // s'il n'y a pas de flux - ajouter
  if (! strstr ($ url, ": //")) $ url = "http: //". $ url;
  // remplace le protocole par des minuscules: hTtP -> http
  $ url = preg_replace ("~ ^ [az] + ~ ie", "strtolower ('\\ 0')", $ url);
  return $ url;
 } 

Ainsi, pour la vérification, vous devez utiliser quelque chose comme ceci:

  $ url = checkurl ($ url);  // réécrit l'URL en elle-même
 if ($ url) exit ("Mauvaise adresse"); 

Validation e-mail

Validation par e-mail - à vérifier comme dans l'exemple précédent.

  //
 // vérifie le savon et retourne
 // * +1 si le savon est vide
 // * -1 si non vide, mais avec une erreur
 // * chaîne si soap est valide
 //

 fonction checkmail ($ mail) {
  // on coupe les caractères de gauche et les espaces extrêmes
  $ mail = trim (pregtrim ($ mail));  // fonction pregtrim () prend ci-dessus dans l'exemple
  // si vide - quitte
  if (strlen ($ mail) == 0) renvoie 1;
  if (! preg_match ("/ ^ [a-z0-9 _-] {1.20} @ (([a-z0-9 -] + \.) + (com | net | org | mil |
  "edu | gov | arpa | info | biz | inc | nom | [az] {2}) | [0-9] {1,3} \. [0-9] {1,3} \. [0- ".
  "9] {1,3} \. [0-9] {1,3}) $ / est", $ mail))
  return -1;
  retourner $ mail;
 } 

Couper les URL à partir de fichiers texte et HTML courbés

Parfois, vous devez couper les liens du texte HTML vers une URL ou un courrier électronique.

Si votre code HTML n'a pas de code clairement incurvé, il s'agit d'une tâche très simple pour une expression régulière du type:

  ] + href = ([^>] +) [^>] *> (. *?) 

Mais les liens sont différents ... Comment faire de votre programme, vous décidez.

Vous ne pouvez prendre que 100% des liens valides, mais certains liens tordus ne tomberont pas (bien qu'ils soient également corrects).

Vous pouvez tout prendre, mais alors certains liens ne seront pas complètement coupés correctement.

Texte du programme:

  <?
 $ str = "
 <a href=url1> name1 </a> 
 <a href=url2> name2 </a>
 <a href='url3'> name3 </a> 
 <a href=url4> <crochets> </a>
 <a href=\"url5\"> <b> gras </ b> </a> 
 <a href=url6> \ "quotes \" </a>
 <a target=\"<tribe pour tromper le programme> hahaha \ "href = url7> 77777 </a>
 <a href=url8 target=\"<tribe pour tromper le programme> hahaha \ "> 88888 </a>";
 echo "<pre> Code source:". htmlspecialchars ($ str). "</ pre>";
 echo "--------------- Option 1 ---------------";
 preg_match_all ("!  ] +) \ "? '?. *?> (. *?)! est", $ str, $ ok);
 pour ($ i = 0; $ i  ". $ ok [1] [$ i]."  - ". $ ok [2] [$ i];
 }
 echo " 
--------------- Option 2 --------------- "; preg_match_all ("! ] + href = \ "? '? ([^ \"'>] +) \ "? '? [^>] *> (. *?)! est", $ str, $ ok); pour ($ i = 0; $ i ". $ ok [1] [$ i]." - ". $ ok [2] [$ i]; } echo "
--------------- Option 3 --------------- "; preg_match_all ("!
] + href = \ "? '? ([^ \"'>] +) \ "? '? [^>] *> ([^ <>] *?)! est", $ str, $ ok); pour ($ i = 0; $ i ". $ ok [1] [$ i]." - ". $ ok [2] [$ i]; } ?>

Le résultat de l'exécution de l'exemple:

Code source:
<a href=url1> name1 </a>
<a href=url2> name2 </a>
<a href='url3'> name3 </a>
<a href=url4> <crochets> </a>
<a href="url5"> <b> gras </ b> </a>
<a href=url6> citations </a>
<a target="<tribe pour tromper le programme> hahaha "href = url7> 77777 </a>
<a href=url8 target="<tribe pour tromper le programme> hahaha "> 88888 </a>
--------------- Option 1 ---------------
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url4 - <crochets>
  • url5 - gras
  • url6 - citations
  • url7 - 77777
  • url8 - hahaha "> 88888
    --------------- Option 2 ---------------
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url4 - <crochets>
  • url5 - gras
  • url6 - citations
  • url8 - hahaha "> 88888
    --------------- Option 3 ---------------
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url6 - citations