regexe simple (avec ! et \)

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 : regexe simple (avec ! et \)

Re: regexe simple (avec ! et \)

par @rthur » 20 août 2016, 01:33

Donc ça marche correctement, on est d'accord ?

Donc maintenant reconstruit ton code progressivement en partant de cette partie qui fonctionne pour trouver à quel moment ça foire

Re: regexe simple (avec ! et \)

par azzeryx » 19 août 2016, 19:32

Dans une page vierge j'obtient ça : array(2) { [0]=> array(3) { [0]=> string(2) "!." [1]=> string(3) " e." [2]=> string(3) " E." } [1]=> array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." } }

Re: regexe simple (avec ! et \)

par @rthur » 19 août 2016, 15:49

page blanche dans le sens nouveau fichier
Crée un nouveau fichier PHP et met uniquement le code que je t'ai fourni

Re: regexe simple (avec ! et \)

par azzeryx » 19 août 2016, 12:33

Comment ça ?? Ma page n'est serte pas blanche mais quel est le problème avec une page blanche ?

Re: regexe simple (avec ! et \)

par @rthur » 19 août 2016, 09:59

Non, si tu mets uniquement mon code dans une page blanche, il n'est pas possible que tu obtiennes ce que tu as indiqué.

Re: regexe simple (avec ! et \)

par azzeryx » 19 août 2016, 09:10

Effectivement je n'ai pas vu à cause des pages... :?

Si par ton code tu entend ça :

Code : Tout sélectionner

$chaine_de_test='!. \!. e. \e. E. \E.'; preg_match_all("/(?:^|[^\\\])([!eE]\.)/",$chaine_de_test,$matches); $math = var_dump($matches);
Alors j'obtient ça :

Code : Tout sélectionner

array(2) { [0]=> array(3) { [0]=> string(2) "!." [1]=> string(3) " e." [2]=> string(3) " E." } [1]=> array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." } } array(2) { [0]=> array(3) { [0]=> string(2) "!." [1]=> string(3) " e." [2]=> string(3) " E." } [1]=> array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." } } array(2) { [0]=> array(3) { [0]=> string(2) "!." [1]=> string(3) " e." [2]=> string(3) " E." } [1]=> array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." } } array(2) { [0]=> array(3) { [0]=> string(2) "!." [1]=> string(3) " e." [2]=> string(3) " E." } [1]=> array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." } }
Et si j'essay de l'integré à mon code :

Code : Tout sélectionner

if(preg_match_all("/(?:^|[^\\\])([!eE]\./",$math,$match_math)) { foreach ($match_math[0] as $v2_math) { $replacement_math = "<font color='purple'>".$v2_math."</font>"; $math = str_replace($v2_math, $replacement_math, $math); $replacement_math = str_replace(".", "", $v2_math); $math = str_replace($v2_math, $replacement_math, $math); } }
rien ne se passe.

Re: regexe simple (avec ! et \)

par @rthur » 18 août 2016, 20:19

Tu n'as probablement pas vu mon message vu qu'il était sur une nouvelle page ;-)

Teste avec mon code, je t'ai indiqué ce que ça devrait ressortir ensuite.

Re: regexe simple (avec ! et \)

par azzeryx » 18 août 2016, 20:06

toujours pas d'idée ? jai tester ça : (?<![\\\])([!eE]\.) mais c'est pas très concluant non plus...

Re: regexe simple (avec ! et \)

par @rthur » 17 août 2016, 23:25

Reprend exactement mon exemple et regarde si tu obtiens la même chose que moi, car là c'est bizarre ton truc.

Re: regexe simple (avec ! et \)

par azzeryx » 17 août 2016, 19:42

Si je fait var_dump de match_math j'ai trois sous-array :
- le premier (0) sélectionne ce qu'il faut mes des caractères en trop aussi :
array(3) { [0]=> string(3) ">E." [1]=> string(3) ">e." [2]=> string(3) " e." } array(3) { [0]=> string(3) " !." [1]=> string(3) " e." [2]=> string(3) " E." } array(3) { [0]=> string(3) ">E." [1]=> string(3) ">e." [2]=> string(3) " e." } array(3) { [0]=> string(3) " !." [1]=> string(3) " e." [2]=> string(3) " E." }
Pourquoi y a t-il ceci qui est compris "<" dans ">E." ?
- le second sélectionne uniquement les bons caractère mais le fait aussi quand il y a un antislash (qui lui n'est pas pris) :
array(3) { [0]=> string(2) "E." [1]=> string(2) "e." [2]=> string(2) "e." } array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." } array(3) { [0]=> string(2) "E." [1]=> string(2) "e." [2]=> string(2) "e." } array(3) { [0]=> string(2) "!." [1]=> string(2) "e." [2]=> string(2) "E." }
- le troisième ne sélectionne rien :
NULL NULL NULL NULL

Re: regexe simple (avec ! et \)

par @rthur » 17 août 2016, 19:07

Fait un var_dump de $match_math et tu verras que non

Re: regexe simple (avec ! et \)

par azzeryx » 17 août 2016, 12:52

oui mais si je remplace $match_math[0] par $match_math[1], il capture y compris quand il y a un \ devant.

Re: regexe simple (avec ! et \)

par @rthur » 16 août 2016, 21:12

Relis mon message ;-)

Re: regexe simple (avec ! et \)

par azzeryx » 16 août 2016, 14:56

J'ai toujours un problème de sélection d’espace en trop...

Code : Tout sélectionner

if(preg_match_all("/(?:^|[^\\\])([!eE]\.)/",$math,$match_math)) { foreach ($match_math[0] as $v1_math) { $replacement_math = "<font color='purple'>".$v1_math."</font>"; $math = str_replace($v1_math, $replacement_math, $math); $replacement_math = str_replace(".", "", $v1_math); $math = str_replace($v1_math, $replacement_math, $math); } }

Re: regexe simple (avec ! et \)

par @rthur » 15 août 2016, 17:33

Effectivement, c'est un peu plus tordu que prévu :
$chaine_de_test='!. \!. e. \e. E. \E.';
preg_match_all("/(?:^|[^\\\])([!eE]\.)/",$chaine_de_test,$matches);
$math = var_dump($matches);
qui donne :

Code : Tout sélectionner

array (size=2) 0 => array (size=3) 0 => string '!.' (length=2) 1 => string ' e.' (length=3) 2 => string ' E.' (length=3) 1 => array (size=3) 0 => string '!.' (length=2) 1 => string 'e.' (length=2) 2 => string 'E.' (length=2)
Dans $math[0] tu as le tableau des éléments correspondant à l'ensemble de ton motif (donc avec les espaces avant).
Dans $math[1] tu as le tableau des éléments correspondant uniquement à tes parenthèses capturantes (donc c'est ce qui t'intéresse)