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 un nombre de 77 chiffres maximum:

  if (ereg ("^ [0-9] {1.77} $", $ chaîne)) echo "oui";  d'autre écho "non"; 

Que la chaîne se compose uniquement de lettres, de chiffres et de "_", une longueur de 5 à 20 caractères:

  if (ereg ("^ [a-za-y0-9 _] {5,20} $", $ chaîne)) echo "oui";  d'autre écho "non"; 

Y a-t-il des caractères dans la chaîne, autres que ceux autorisés. Les lettres, chiffres et "_" sont considérés comme valides. Longueur ici ne peut pas être vérifiée, sauf que juste une condition supplémentaire strlen ($ chaîne). Ne pas confondre avec l'exemple précédent - bien que le résultat soit le même, mais la méthode est différente, "par contradiction"

  if (! ereg ("[^ a-za-y0-9 _]", $ chaîne)) 
  echo "pas de caractères étrangers (OK)"; 
 autre chose 
  echo "est un caractère étranger (FALSE)"; 

Pour une comparaison insensible à la casse, utilisez ereg i ().

Y a-t-il des caractères consécutifs dans la chaîne, pas moins de 3 caractères d'affilée (comme "abgGDDeYe", mais pas "AABBAABB"):

  if (preg_match ("/ (.) \\ 1 \\ 1 /", $ chaîne)) echo "oui";  d'autre écho "non"; 

Remplacer partout dans le texte LINE1 sur LINE2 (la tâche est résolue sans expressions regegular):

  $ string = str_replace ("LINE1", "LINE2", $ chaîne); 

Remplacez les courbes des codes pour la transition de la ligne à la normale: pour cela, il suffit de supprimer "\ r".

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

Il y a toujours des pépins, tapez "\ r \ r \ n".

  $ string = str_replace ("\ r", "", $ chaîne); 

Remplacez tous les espaces en double par un. N'essayez pas d'appliquer str_replace ici, c'est une bonne fonction, mais pas pour cet exemple.

  $ string = preg_replace ("/ XX + /", "X", $ chaîne);  // met un espace au lieu de X 

Dans le texte il y a quelques mots, disons "MOT" et "LYALYAL" (etc.), qui devraient être remplacés de la même manière par la même chose, mais avec des additifs.

Peut-être que des mots manquent ou sont trouvés plusieurs fois dans n'importe quel registre.

Ie. s'il y avait un "mot" ou un "mot" (ou bien comme ça), vous devez le remplacer par "<b> mot </ b>" ou "<b> SLOW" </ b> "(selon la façon dont il était).

En d'autres termes, il est nécessaire de trouver une liste de mots dans n'importe quel registre et d'insérer des lignes fixes ("<b>" et "</ b>") le long des bords des mots imbriqués.

  $ string = preg_replace ("/ (mot1 | mot2 | halal | mot99) / si", " \\ 1 ", $ chaine); 

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

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

Trouvez le texte inclus dans une balise et remplacez-le par une autre balise, par exemple: <TITLE> ... </ TITLE> remplacez la même chose dans <MY_TEG> ... </ MY_TEG> dans le fichier HTML:

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

Surligner le code PHP dans les messages

Par exemple, vous avez un forum comme vBulletin, où vous pouvez mettre en évidence le code, si vous le mettez en évidence: [PHP] n'importe quel code [/ PHP] .

À la fin, après cela (en regardant le message), vous obtenez un code php sympa et coloré.

Et donc, si vous voulez toutes les pièces entre [PHP] .. [/ PHP] et <? ..?> Pour être perçu comme du code et de la couleur, alors cela peut être fait assez facilement.

Texte du programme

 <?

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

 pour un lyalal 

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

 // supprime les avertissements (dans highlight_string il y a des pépins) 
 error_reporting (0);

 // Fonction de surligner un morceau de texte
 function _my _ ($ 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 (); 
  return $ s;
 }

 // recherche dans le texte toutes les pièces comprises entre <? ... ou [PHP] ...
 $ str = preg_replace ("! (\ [php \] | <\?) (. *?) (\ [/ php \] | \?>)! ise", "_ mon _ ('\\ 2', '\ \ 1 ',' \\ 3 ') ", $ str);

 echo $ str;

 ?>

Après un tel programme, l'écran affiche:

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

Apparemment, tout ce qui était entre les lignes spéciales a été mis en évidence, et le texte étranger n'a pas changé d'aucune façon. Si vous allez postuler pour le forum, alors pensez à la transition vers de nouvelles lignes.

Si vous avez le message entier - c'est du code solide, alors utilisez highlight_string directement, sans chercher <? ..?> Dans le code ...

Vérification de l'exactitude de l'URL

Cette fonction est tirée de la source du chat.

Prend en charge tout ce qui ne peut être que dans l'URL ...

Rappelez-vous que vous ne devriez pas seulement vérifier, mais aussi prendre une nouvelle valeur

de la fonction, t. elle ajoute "http: //" en cas d'absence.

  // Ajouter  fonction pour l'élimination des dangereux sivols
 function pregtrim ($ str) {
  return preg_replace ("/ [^ \ x20- \ xFF] /", "", @ strval ($ str));
 }
 //
 // vérifie l'URL et renvoie:
 // * +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 sparse
 // if (checkurl ($ url) == 0) echo "tout va bien"
 // ou if (strlen (checkurl ($ url))> 1) echo "tout va bien"
 //
 // Si le protocole n'était pas dans l'URL, il sera ajouté ("http: //")
 //
 function checkurl ($ url) {
  // coupe les caractères de gauche et les espaces de fin
  $ url = trim (pregtrim ($ url));
  // si vide - exit
  if (strlen ($ url) == 0) renvoie 1;
  // vérifier 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 protokala - ajouter
  if (! strstr ($ url, ": //")) $ url = "http: //". $ url;
  // remplace le protocole par un minuscule: hTtP -> http
  $ url = preg_replace ("~ ^ [az] + ~ ie", "strtolower ('\\ 0')", $ url);
  return $ url;
 } 

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

  $ url = checkurl ($ url);  // réécrit l'URL à elle-même
 if ($ url) exit ("URL non valide"); 

Validation de l'e-mail

Vérification de l'exactitude de l'e-mail - vérifiez la même chose que l'exemple précédent.

  //
 // vérifie le savon et retourne
 // * +1, si le savon est vide
 // * -1, s'il n'est pas vide, mais avec une erreur
 // * chaîne, si le savon est bon
 //

 Fonction checkmail ($ mail) {
  // coupe les caractères de gauche et les espaces de fin
  $ mail = trim (pregtrim ($ mail));  // function pregtrim () prends le dessus dans l'exemple
  // si vide - exit
  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;
  return $ mail;
 } 

Couper des URL à partir de courbes texte et HTML

Parfois, vous devez supprimer les liens du texte HTML vers une URL ou un e-mail.

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

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

Mais les liens sont différents ... Comment faire votre programme, c'est à vous de décider.

Vous ne pouvez prendre que 100% des liens corrects, mais certaines courbes ne seront pas envoyées (bien qu'elles soient également vraies).

Vous pouvez tout prendre à la suite, mais certains liens ne seront pas complètement coupés.

Texte du programme:

  <?
 $ str = "
 <a href=url1> nom1 </a> 
 <a href=url2> nom2 </a>
 <a href='url3'> nom3 </a> 
 <a href=url4> <parenthèses </ a> </a>
 <a href=\"url5\"> <b> gras </ b> </a> 
 <a href=url6> \ "guillemets \" </a>
 <a target=\">essayez d'essayer de déjouer le programme </a> hahaha \ "href = url7> 77777 </a>
 <a href=url8 target=\"<Une tentative pour déjouer 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];
 }
 écho " 
--------------- Option 2 --------------- "; preg_match_all ("! ] + href = \ "? '? ([^ \"']] +) \ "? '? [^>] *> (. *?)! est", $ str, $ ok); pour ($ i = 0; $ i ". $ ok [1] [$ i]." - ". $ ok [2] [$ i]; } écho "
--------------- Option 3 --------------- "; preg_match_all ("!
] + href = \ "? '? ([^ \"']] +) \ "? '? [^>] *> ([^ <>] *?)! est", $ str, $ ok); pour ($ i = 0; $ i ". $ ok [1] [$ i]." - ". $ ok [2] [$ i]; } ?>

Exemple de sortie:

Code source:
<a href=url1> nom1 </a>
<a href=url2> nom2 </a>
<a href='url3'> nom3 </a>
<a href=url4> <parenthèses </ a> </a>
<a href="url5"> <b> gras </ b> </a>
<a href=url6> "devis" </a>
<a target="<Une tentative pour déjouer le programme> hahaha "href = url7> 77777 </a>
<a href=url8 target="<Une tentative pour déjouer le programme> hahaha >> 88888 </a>
--------------- Option 1 ---------------
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url4 - <parenthèses>
  • url5 - bold
  • url6 - "citations"
  • url7 - 77777
  • url8 - hahaha "> 88888
    --------------- Option 2 ---------------
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url4 - <parenthèses>
  • url5 - bold
  • url6 - "citations"
  • url8 - hahaha "> 88888
    --------------- Option 3 ---------------
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url6 - "citations"