Quelques exemples d'expressions régulières

Par thème:


Le numéro de la ligne jusqu'à 77 chiffres:

 if (ereg ( "^ [0-9] {1,77} $", $ string)) echo "oui";  else echo "non"; 

Il se compose si une chaîne de lettres, des numéros, et "_" de longueur de 5 à 20 caractères:

  if (ereg ( "^ [a-ZA-ya0-9 _] {5,20} $", $ string)) echo "oui";  else echo "non"; 

Y at-il une ligne dans un caractère autre que permis. Valides considérées comme des lettres, des chiffres et "_". La longueur ne peut pas être vérifié ici, il est juste une condition supplémentaire strlen ($ string). A ne pas confondre avec l'exemple précédent - et bien que le résultat est le même, mais la méthode est différente, "au contraire"

  if (! ereg ( "[^ a-ZA-ya0-9 _]", $ string)) 
  echo "pas de caractères étrangers (OK)"; 
 autre 
  echo "il y a des caractères étrangers (FALSE)"; 

Pour les comparaisons sont cas une utilisation indépendante ereg i ().

Y at-il une ligne de caractères consécutifs au moins 3 caractères consécutifs (tels que "abvgDDDeё", mais pas "aabbaabb"):

  if (preg_match ( "/ () \\ 1 \\ 1 /.", $ string)) echo "oui";  else echo "non"; 

Remplacer tout le texte sur le character_expression2 string1 (le problème est résolu, sans expressions regegulyarnyh):

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

Remplacer les courbes de ligne codes de transition à la normale: pour cela, vous devez seulement supprimer le "\ r".

Transitions sont normaux (mais différent!): "\ N" ou "\ r \ n".

Pourtant, il y a des pépins, comme "\ r \ r \ n".

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

Remplacer tous les espaces multiples en un seul. Ne pas essayer d'utiliser str_replace ici, cela est une bonne option, mais pour cet exemple.

  $ String = preg_replace ( "/ XX + /", "X", $ string);  // Au lieu de X comprennent un espace 

Dans le texte il y a quelques mots, dire "mot" et "lyalyalya" (etc.) qui doivent être remplacés de la même manière à la même chose, mais avec des ajouts.

Peut-être que les mots sont manquants ou il y a beaucoup de temps dans tous les cas.

Ie s'il y avait un «mot» ou «mot» (ou autre chose), vous avez besoin de le remplacer sur le "<b> mot </ b>" ou "<b> mot </ b>" (recherche comme il a été).

En d'autres termes, vous devez trouver une liste de mots dans tous les cas, et insérer les bords des mots naylennyh ligne fixe (sur le "<b>" et "</ b>").

  $ String = preg_replace ( "/ (mot1 | mot2 | lyalyalya | slovo99) / si", "\\ 1", $ string); 

Recherche de texte dans une certaine étiquette, tels que <TITLE> ... </ TITLE> du fichier HTML ($ string - le code source).

  if (preg_match ( "!  (. *?)  ! Si ", $ string, $ ok))
  echo "tag est trouvé, le texte: $ ok [1]";
 autre
  echo "tag not found"; 

Recherche de texte dans une certaine étiquette et le remplacer par une étiquette différente, par exemple: <TITLE> ... </ TITLE > remplacer de manière similaire à <MOY_TEG> ... </ MOY_TEG> dans le fichier HTML:

  preg_replace ( "! ! Si "," <MOY_TEG> \\ 1 МОЙ_ТЕГ>  ", $ String); 

Code PHP soulignant dans les messages

Par exemple, vous avez un forum vBulletin Le type, où vous pouvez mettre en évidence le code si elle est d'allouer spécifiquement: [PHP] tout code [/ PHP].

En conséquence, après que (lors de l'affichage d'un message), est une belle et php-code couleur.

Et donc, si vous voulez que tous les morceaux entre le [PHP] .. [/ PHP] et <? ..?> Vu que le code et la couleur, il peut être fait assez facilement.

Le texte du programme.

 <?

 // Message d'origine:
 // ------------------------------------------------ ------
 $ Str = '
 Pamagite, nichavo ne fonctionne pas!  Voici un exemple:
 [Php]
 // commentaire
 # commentaire
 phpinfo ();
 [/ Php] 

 lyalyalya lyalyalya 

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

 // Supprimer l'avertissement (en highlight_string il y a des pépins) 
 error_reporting (0);

 // Fonction soulignant un morceau de texte
 fonction _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;
 }

 // Rechercher tous les morceaux dans le texte entre le <? ... Ou [PHP] ...
 $ Str = preg_replace ( "(\ [php \] |! <?. \) (*) (\ [/ Php \] | ?? \>!) Ise", "_ ma _ ( '\\ 2', '\ \ 1 '' \\ 3 ') ", $ str);

 echo $ str;

 ?>

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

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

Comme on le voit, tout ce qui était entre spets.strokami point culminant, et un étranger ne change pas le texte. Si vous allez utiliser pour le forum, puis réfléchir à la transition vers la nouvelle ligne.

Si vous avez tout le message - il est un code continue, l' utilisation highlight_string directement sans avoir à rechercher dans le code ... <..?>

Vérifiez l'URL à l'exactitude

Cette fonction est prise à partir de la source dans le chat.

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

Rappelez-vous que vous devez non seulement vérifier, mais acceptez également la nouvelle valeur

de la fonction, qui ajoute le «http: //» dans le cas de son absence.

  // Ajouter.  fonctionner pour éliminer la valeur de charset dangereux
 fonction pregtrim ($ str) {
  retour preg_replace ( "/ [^ \ x20- \ xFF] /", "", @ strval ($ str));
 }
 //
 // Vérifiez l'URL et retourne:
 // * 1, si l'URL est vide 
 // Si (checkurl ($ url) == 1) echo "vide"
 // -1 * Si l'URL est pas vide, mais avec des erreurs
 // Si (checkurl ($ url) == - 1) echo "erreur"
 // * String (nouvelle URL), si l'URL est trouvée et otparsen
 // Si (checkurl ($ url) == 0) echo "tout est OK"
 // Ou si (strlen (checkurl ($ url))> 1) echo "tout est OK"
 //
 // Si le protocole n'a pas été dans l'URL, il sera ajouté ( "http: //")
 //
 fonction checkurl ($ url) {
  // Couper des symboles et des espaces d'extrême gauche
  $ Url = trim (pregtrim ($ url));
  // Si elle est vide - sortie
  if (strlen ($ url) == 0) return 1;
  // Vérifiez l'URL pour le bon
  if (! preg_match ( "~ ^ (? :( ?: Https | ftp | telnet): ?? // (: [A-z0-9_-] {1,32} ".
  "(? :: [A-z0-9 _-] {1,32})? @)?)? (? :( ?: [A-z0-9 -] {1128} \) + (: 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))?
  retourner -1;  // Si pas droit - sortie
  // Si non protokala - Ajouter
  if (strstr ($ url ": //"!)) $ url = "http: //" $ url ;.
  // Remplacez le minuscule protocole: HTTP -> http
  $ Url = preg_replace ( "~ ^ [az] + ~ ie", "strtolower ( '\\ 0')", $ url);
  return $ url;
 } 

Donc, pour tester la nécessité d'utiliser quelque chose comme ceci:

  $ Url = checkurl ($ url);  // Ecraser l'URL en moi
 if ($ url) exit ( "Wrong URL"); 

Vérification E-mail

Vérification E-mail - pour vérifier l'exemple précédent.

  //
 // Vérifie savon et retourne
 // * +1 Si le savon est vide
 // * -1 Si non vide, mais avec une erreur
 // * Ligne si vrai savon
 //

 fonction checkmail ($ mail) {
  // Couper des symboles et des espaces d'extrême gauche
  $ Courrier = trim (pregtrim ($ mail));  // Fonction pregtrim () prend l'exemple ci-dessus,
  // Si elle est vide - sortie
  if (strlen ($ mail) == 0) return 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))
  retourner -1;
  return $ courrier;
 } 

Couper l'URL à partir des courbes de texte et de fichiers HTML

Parfois, vous devez couper des références HTML-texte à l'URL ou par courriel.

Si vous êtes dans le code HTML ne connaît pas la courbe, il est une tâche très simple pour une expression régulière, tels que:

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

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

liens corrects, mais des liens puis quelques courbes suivantes ne seront pas obtenir (bien que, eux aussi, à droite) peuvent ne prendre que 100%.

Vous pouvez prendre tout, mais alors certains liens ne sera pas coupé tout à fait correct.

Texte du programme:

  <?
 $ Str = "
 <a href=url1> nom1 </a> 
 <a href=url2> nom2 </a>
 <a href='url3'> nom3 </a> 
 <a href=url4> <crochets> </a>
 <a href=\"url5\"> <b> gras </ b> </a> 
 <a href=url6> \ "guillemets \" </a>
 <a target=\"<popytka déjouer programmu> hahaha \ "href = url7> 77777 </a>
 <a href=url8 target=\"<popytka déjouer programmu> hahaha \ "> 88888 </a>";
 echo "<pre> Code Source:" htmlspecialchars ($ str) "</ pre>"; ..
 l'écho "--------------- --------------- Option 1";
 preg_match_all ( "!  ] +) \ "??. '*> (*) Est?.?!", $ Str, $ ok);
 for ($ i = 0; $ i  ". $ Ok [1] [$ i]."  . - "Ok $ [2] [$ i];
 }
 echo " 
--------------- --------------- Version 2 "; preg_match_all ( "! ] + Href = \ " '( [^ \ ??">] +) \ "' [^>] *> (*.?) Est ??!", $ Str, $ ok); for ($ i = 0; $ i ". $ Ok [1] [$ i]." . - "Ok $ [2] [$ i]; } echo "
--------------- --------------- Option 3 "; preg_match_all ( "!
] + Href = \ " '( [^ \ ??">] +) \ "' [^>] *> ([^ <>] *?) Est ??!", $ Str, $ ok); for ($ i = 0; $ i ". $ Ok [1] [$ i]." . - "Ok $ [2] [$ i]; } ?>

Le résultat est un exemple d'exécution:

Code Source:
<a href=url1> nom1 </a>
<a href=url2> nom2 </a>
<a href='url3'> nom3 </a>
<a href=url4> <crochets> </a>
<a href="url5"> <b> gras </ b> </a>
<a href=url6> "cite" </a>
<a target="<popytka déjouer programmu> hahaha "href = url7> 77777 </a>
<a href=url8 target="<popytka déjouer programmu> hahaha "> 88888 </a>
--------------- --------------- Option 1
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url4 - <crochets>
  • url5 - gras
  • url6 - "guillemets"
  • url7 - 77777
  • url8 - hahaha "> 88888
    --------------- --------------- Version 2
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url4 - <crochets>
  • url5 - gras
  • url6 - "guillemets"
  • url8 - hahaha "> 88888
    --------------- --------------- Option 3
  • url1 - nom1
  • url2 - nom2
  • url3 - nom3
  • url6 - "guillemets"