Règles typographiques et expressions régulières

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Règles typographiques et expressions régulières

par Hywan » 13 avr. 2009, 12:15

Bah réfléchis un peu : tu cherches tous les deux-points (:) qui ne sont pas précédés de http, ftp etc. En fait, comme il existe un nombre infini de protocole, le mieux est d'utiliser une assertion avant, i.e. tu cherches tous les deux-points qui ne sont pas suivis par un double slash (//). Bien sûr, tous les deux-points ne doivent pas être précédés d'un espace car c'est ce qu'on veut corriger.
Exemple :
$dummy = 'Here is an example: a dummy value with : a http:// protocol.';

preg_match_all(
    '#\w+:(?!/)#',
    $dummy,
    $matches
);

print_r($matches);
Produira :

Code : Tout sélectionner

Array ( [0] => Array ( [0] => example: ) )
Si tu t'amuses à enlever l'assertion avant, i.e. seulement utiliser l'expression régulière \w+: tu verras que ça produira :

Code : Tout sélectionner

Array ( [0] => Array ( [0] => example: [1] => http: ) )
L'assertion avant négative a donc une grande utilité :-).

par Topper » 13 avr. 2009, 11:51

Oui mais je vois pas l'intérêt de savoir ce qu'il y a derrière le point d'interrogation. Cela peut être un mot dont l'espace devant a été oublié et ça ne veut absolument pas dire que c'est une adresse internet.

par Hywan » 13 avr. 2009, 10:08

Pour ma part, j'aurais joué avec les assertions (arrières). Tu as regardé ?

par Topper » 12 avr. 2009, 20:01

J'ai beau faire des tests, il me prend toujours la chaine avec http. :(

Voir test : http://lumadis.be/regex/test_regex.php?id=104

par Hywan » 12 avr. 2009, 18:24

Hey :-),

Ce n'est pas compliqué. Je te conseille d'aller faire un tour sur lumadis.be. Tu y trouveras ta réponse ;-).

par Topper » 12 avr. 2009, 13:07

Aucune idée pour exclure une portion de chaine dans une expression régulière alors ? :cry:

Règles typographiques et expressions régulières

par Topper » 07 avr. 2009, 13:41

Bonjour à tous,

Certaines personnes aiment bien que les règles typographiques soient respectées. L'un d'elle fait que les ponctuations doubles (?!:;) doivent avoir un espace entre la ponctuation et le caractère qui précède (dans l'idéal insécable). Elles doivent également avoir un espace après (dans l'idéal normal).

J'ai tenté de coder cela avec une expression régulière mais je me heurte à l'exclusion des chaînes qui comportent ces ponctuations et qui ne doivent pas être prises en compte comme les liens.
$chaine="Voici un texte avec des? qui sont parfois ??? avec un esssspace devant ou non; Il y a ausssssi des: ponctuations dans un lien http://www.free.fr?id=1 qu'il ne faut pas modifier. Il y a aussi! des points d'exclamation !";
echo $chaine."<br />";
// Remplace toutes les sequences de plusieurs ponctuations doubles par une seule
$chaine=ereg_replace("[!]{1,}","!", $chaine);
$chaine=ereg_replace("[?]{1,}","?",$chaine);
$chaine=ereg_replace("[:]{1,}",":",$chaine);
$chaine=ereg_replace("[;]{1,}",";",$chaine);
// Place un espace insecable avant les ponctuations doubles
$chaine=preg_replace('`([_a-zA-Z0-9]+)([[:space:]]?)(\?|\!|:|;)`','$1&nbsp;$3',$chaine);
echo $chaine;
Si quelqu'un a une idée pour que la règle exclue les mots commençant par http::// et ftp:// :(