Comprends rien au regexp, dsl ...

Signaler
Messages postés
13
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
4 novembre 2007
-
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
-
Yop all,

Je suis dsl de poser une question de boulet mais sur la plupart des problemes que je rencontre apres avoir analyser quelques morceaux de scripts, lu quelques cours et exemple et mettre casser la tête 3-4 fois ca passe mais la nan pas moyen ....

donc en fait c'est tout con mais je capte rien ; j'aimerais pouvoir extraire "Lover - Sheep" de ca :
<TD VALIGN= "middle"><H1>&nbsp; Lover - Sheep&nbsp; <BDO dir="ltr">

En sachant que " <TD VALIGN="middle"><H1>&nbsp; " et "&nbsp; <BDO dir ="ltr">" c'est les chaines de caractères qui entourent "Lover - Sheep" dans le fichier. En gros la question c'est 'rapporte moi ce qui a entre ces deux chaines de caracteres'.

Alors je me suis dis "bon ca doit etre tout con je vais étudier preg_match_all et ca va le faire" et j'ai tenter des trucs du genre
preg_match_all($motif,$source,$out);
Avec le fichier en entier en source, mais alors en motif je calle que dalle ... C'est pas faute d'avoir lu les deux tutos suivants http://www.commentcamarche.net/php/phpreg.php3 et http://www.expreg.com/index.php. Mais bon la rien n'y fait je comprends rien aux regexp ...

Donc tout simplement si vous pouviez me donner un motif qui va bien et m'expliquer en 2-3 mots les differentes composantes du motif ca m'aiderait un max. Je crois que faut juste que je capte l'architecture du truc et ce sera bon ... au moins se sera bon pour que j'avance dans la comprehension parce-que la je suis bloqué à la base.

thx all

8 réponses

Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
Hello,

dans la doc de php.net, il y a dans le 1er exemple proposé, une expression régulière qui fait très axectement ce que tu as demandé...avant d'aller voir des tutos, lis déjà la doc ;-)
http://fr.php.net/manual/fr/function.preg-match-all.php
Messages postés
13
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
4 novembre 2007

thx je fais ca tout de suite ...
Messages postés
13
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
4 novembre 2007

OUAaaaaaaaaaaaaaaaaaHhhhhhhhhhhhhh OMG !!!!!!!!!! bon je réessaie de capter tout ca .... toujours aussi cho cho cho chocolat ... dsl ca c'est le post qui sert juste a dire que je lutte avec les regexp. C'est repati^$[:omg:]@...
Messages postés
13
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
4 novembre 2007

Yop malalam,

En fait j'avais déjà étudier la doc de php mais j'avais pas plus compris. Là par contre avec le recul et peut etre a force de se plonger dessus ca s'éclaircit un peu plus. Par contre dans l'exemple 1869, puisque je suppose que c'est à celui que tu faisais référence, y a deux trois trucs que je capte pas :

$html = "texte en grascliquez moi";

preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER);

La je calle pas l'utilité de [^>]* , c'est pour exclure les > ?? et après quand y se reporte au deuxieme jeu de parenthese ouvrante avec \\2 je calle pas pourquoi ca va lui permettre de récupérer a chaque fois la bonne fermeture de balise. En fait c'est surtout le [^>]* que je calle pas. Si c'etait juste possible d'expliquer ca stp ...                        
                
Messages postés
13
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
4 novembre 2007

Bon, sinon est-ce que quelqu'un pourrait me dire où je fais faux dans mon preg_match_all ou alors c'est sur l'affichage de celui-ci que je fais une faute parce-que ca me retourne un tableau vide (no offset) :

$motif = '`(<TD VALIGN="middle"><H1>&nbsp;)(.*)(&nbsp; )`';

preg_match_all($motif,$source,$result);

echo ''.$result[0].''

Thx
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
hello,

(<([\w]+)[^>]*>)
=>
d'avord : <
On prend une chaîne qui commence par "<"
puis [\w]+ : qui continue par n'importe quel "mot". (div, p, blabla... sans espace ou caractère spéciaux autre que des caractères xml compliant pour un nom d'élément)
[^>]* : puis suivi de toute occurence de quoi que ce soit HORMIS le caractère ">" : ça perlet d'inclure les attrivuts d'un élémnt par exemple : style="display:inline;"
Puis qui finit par >.
Bref là, on capture tout ce qui est balise ouvrante :  mêmme avec des attributs :

 par exemple.

Pour le reste, fais voir le html que tu veux capturer.
 
Messages postés
13
Date d'inscription
mercredi 4 août 2004
Statut
Membre
Dernière intervention
4 novembre 2007

Thx pour l'explication, ben ce que je veux capturer c'est exactement ca
<TD VALIGN="middle"><H1>&nbsp; Lover - Sheep&nbsp; <BDO dir="ltr">
</H1></TD>

Moi je veux récupérer "Lover - Sheep" et dans le html c'est entouré par les balises ci-dessus. Mais des balises comme-ca y en a vraiment des masses dans le html alors je me demandais si je pouvais pas cibler juste ce qui a précisément entre <TD VALIGN="middle"><H1>&nbps; et "&nbps; " ?
D'où le preg_match_all que j'ai effectué. Mais je dois pas etre dans le bon la. En tout cas, merci de ton aide :)
Messages postés
10840
Date d'inscription
lundi 24 février 2003
Statut
Modérateur
Dernière intervention
2 mars 2010
23
<?php
$sChaine = '<TD VALIGN="middle">&nbsp; Lover - Sheep&nbsp;

</TD>';
preg_match_all('`<[\w]+[^>]*>|&nbsp;+(.*)<`im', $sChaine, $aRes);
print_r($aRes);
?>

débrouilles toi pour virer le dernier &nbsp; j'ai pas réussi facilement.