regex

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 : regex

Re: regex

par stealth35 » 10 nov. 2010, 18:12

je sais bien mais je suis en formation et on n'a pas le droit d'utiliser des biblio
c'est interne a PHP :wink:

Re: regex

par newphpman » 10 nov. 2010, 18:11

je sais bien mais je suis en formation et on n'a pas le droit d'utiliser des biblio

Re: regex

par stealth35 » 10 nov. 2010, 18:10

c'est la la limite des regexp, c'est pour ca qu'il faut utilise un outils qui est fait pour : DOMDocument :wink:

Re: regex

par newphpman » 10 nov. 2010, 18:04

D'accord donc obliger de le mettre. ^^

J'aurais une petite question si tu as la réponse je suis preneur, j'ai une page html, je dois vérifier que la structure est bonne c'est a dire balise ouvrante suivi balise fermante, balise auto fermante....

J'aimerais pour ça parcourir ma page tout en récupérant au fur et a mesure mes balises, tout ce qui est entre <> pour après les vérifier. mais ça fait une petite heure que je buche dessus et jy arrive pas.

Ma methode n'est peut etre pas la bonne.

Re: regex

par stealth35 » 10 nov. 2010, 17:56

non il va bien aller au premier >, c'est mis qui t'as induit en erreur en disant qu'il servait a rien

Re: regex

par newphpman » 10 nov. 2010, 17:47

Et si j'ai bien compris si je ne le mets pas au premier exemple ma chaine c'est "<h1> ceci est <u>test</u></h1>" il va aller jusqu'au > de </u> donc mon deuxieme paramètre (.*?) ne va rien valoir?

Re: regex

par stealth35 » 10 nov. 2010, 17:44

Oui effectivement un peu dur a comprendre.

Mais si je ne mets pas le ? au premier, dans mon tableau de retour ma deuxieme valeur est vide il ne m'affiche rien pour ce qui est entre <h1> et </h1>
oui c'est vrai, dans se cas la c'est mieux d'utiliser un ^[\>]*

Re: regex

par newphpman » 10 nov. 2010, 17:41

Oui effectivement un peu dur a comprendre.

Mais si je ne mets pas le ? au premier, dans mon tableau de retour ma deuxieme valeur est vide il ne m'affiche rien pour ce qui est entre <h1> et </h1>

Re: regex

par stealth35 » 10 nov. 2010, 17:28

pas besoin de faire un ? pour le premier, pour le deuxieme

t'as 2 type de * (ou +) le greedy ou le lazy par défaut il est en greedy ca veux dire qui va allé chercher le plus de caractère possible jusqu'a la suite donc jusqu'au dernier </h1> trouver
le mode lazy (option ?) il ira chercher le moins de caratere possible jusqu'a la suite, donc au prochain </h1>

mais c'est vrai que c'est pas simple a comprendre puisque ? signifie aussi une condition

Re: regex

par newphpman » 10 nov. 2010, 17:04

Ton motif fonctionne pour le cas ou j'avais un probleme mais du coup je n'ai plus les titres où la balise de titre est du style <h1 sfgsdfsehdfh>

c'est pas encore ça :-(

edit:

en modifiant ton motif comme cela:

$motif = '/\<(h[1-6]).*?\>(.*?)\</\1\>/i';

cela fonctionne. Pourrais-tu m'expliquer ce que signifie .*? car .* tout zero ou plusieurs fois mais avec le ? je ne sais pas

Re: regex

par stealth35 » 10 nov. 2010, 16:44

pas terrible de parser du html avec des regex y'a DOMDocument pour ca : sinon essaye aevc se regexp :
$motif = '/\<(h[1-6])\>(.*?)\</\1\>/i';

regex

par newphpman » 10 nov. 2010, 16:30

Bonjour j'ai un petit problème,
j'essaie de créer un script qui m'affiche tout les titres d'une page html en enlevant les balises.

voila mon code:

$motif = '#(<(h[1-6]).*>)(.+)(<\/\2>)#';
if (isset($_SERVER['argv'][1]))
{
$file = $_SERVER['argv'][1];
if (file_exist($file) &&
file_nodir($file) &&
fileis_readable($file))
{
$fd = fopen($file, 'r');
if ($fd !== false)
{
$tmp = fread($fd, filesize($file));
if ($tmp !== false)
{
preg_match_all($motif, $tmp, $res);
print_r($res);
}
}
fclose($fd);
}
}

et je ne comprends pas pourquoi dans mon tableau de resultat, j'ai mon $res[1] qui n'est pas == à <h1>
Array
(
[0] => Array
(
[0] => <h1>Ceci est <u>un test</u></h1>
[1] => <h1 style="display:block; font-weight:700; font-size:26;">Niveau H1</h1>
[2] => <h2 style="display:block; font-weight:700; font-size:20;">Niveau H2</h2>
[3] => <h3>Niveau H3</h3>
[4] => <h4>Niveau H4</h4>
[5] => <h5>Niveau H5</h5>
[6] => <h6>Niveau H6</h6>
)

[1] => Array
(
[0] => <h1>Ceci est <u>
[1] => <h1 style="display:block; font-weight:700; font-size:26;">
[2] => <h2 style="display:block; font-weight:700; font-size:20;">
[3] => <h3>
[4] => <h4>
[5] => <h5>
[6] => <h6>

mon expression est peut etre pas bonne mais la je vois pas! quelqu'un pour m'aider?