Accueil > Forum > > > > expression reguliere fort hardue!
expression reguliere fort hardue!
mardi 18 octobre 2005 à 16:04:18 |
expression reguliere fort hardue!

hansap
|
voila, ca fait un moment que j'essaie de resoudre ce probleme, j'ai posté dans plusieurs forums, mias mon post le plus complet se trouve ici : http://www.developpez.net/forums/viewtopic.php?t=406330&start=15 si vous voulez bien m'aider... :) pour reprendre la problemeatique : (copier coller de mon post sur developpez.net) j'ai créé, pour une action de BTS, un moteur de template. une de ses fonctionnalitées est de substituer un "bloque" par "autre chose" (pas important ici) pour substituer ce block, je doit tout d'abord l'extraire, pour ce faire, je fait un preg_match() qui me retourne mon block, je fait mes traitemeznts, puis je fait un str_replace() pour substituer le nouveuax block. mon pb se situe au niveau du preg_match : cette fonction accepte trois parametre. L'un d'eux est une expression reguliere. cette expression est : "/<li>.*?\[ *testBDD *; *block *= *li *\].*<\/li>/sU" pour simplifier, on peut la noter : "/<li>.*?.*<\/li>/sU" mon pb : au lieu de prendre le dernier <li> disponible, elle prend le premier...cad : Code:
<li> ne pas me prendre mias quand meme pris </li> <li> je veut cette partie </li> <li> ne pas me prendre et ca marche </li>
donnera : Code: <li> ne pas me prendre mias quand meme pris </li> <li> je veut cette partie </li>
alors que je ne veut que : Code: <li> je veut cette partie </li> meric de votre aide svp ))
|
|
mardi 18 octobre 2005 à 17:12:10 |
Re : expression reguliere fort hardue!

Anthomicro
|
Salut, je ne comprends pas ton problème. Partons d'un fichier html, que veux-tu parser et retourner ? (ça sera plus simple à comprendre je pense) a +
|
|
mardi 18 octobre 2005 à 18:00:05 |
Re : expression reguliere fort hardue!

hansap
|
conanit tu les moteur de template? je veut en faire un moi meme. cad : tu as deux parties: une page HTML (purement fixe) un script PHP (purement dynamique)
a partir du script qui se debrouille pour recupérer des infos (requetes ou autre) tu fusionne les données dand ton template.
cad : la ou tu n'avait qu'une balise [balise; client.nom] tu auras tous les noms de tes clients...
dans mon pb :
j'ai une balise [balise; block = li] suivit de balsies du type [balise; client .nom] pourquoi la rpemiere. car la ou il n'y avait qu'une seule balise, vont apparaitre plein de nom de client... faut bien savoir par ou les separer... et bien la le separateur (le "block") sera un <li>...</li>
donc, a partir de tout mon fichier HTML chargé dans une varible chaine de caractere, je veut pouvoir retrouver <li> bla bla bla </li>
et le bon... si tu n'a pas compris va sur : http://www.developpez.net/forums/viewtopic.php?t=406330&start=15 stp :) j'ai passé plusieurs post a expliquer le pourquoi du comment :))
|
|
mardi 18 octobre 2005 à 18:20:22 |
Re : expression reguliere fort hardue!

J_G
|
hansap => Connais tu le XLS ? Sorte de règle transformation des fichier XML (dont HTML fait parti)... Tu écrit ta règle XLS, Tu colle ton XML dans une moulinette sous l'égide du XLS. Il en ressort un nouveau XML... Sinon, je suis comme Antho : problème de compréhension, même en allant voir sur developpez.net. Pour isoler le contenu des <li> ici </li> : $matches= array(); preg_match_all("@<li>((\w|\s)*)</li>@", $matches, $text_html); echo nl2br(print_r($matches,true)); Autrement, je te propose tout ça : L'ordre est tel que $matches[0] est un tableau qui contient les résultats qui satisfont le masque complet, $matches[1] est un tableau qui contient les résultats qui satisfont la première parenthèse capturante, etc. Exemple 1. Exemple avec preg_match_all() et PREG_PATTERN_ORDER | <?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<strong>exemple : </strong><div align=\"left\">un test</div>", $out, PREG_PATTERN_ORDER); echo $out[0][0] . ', ' . $out[0][1] . "\n"; echo $out[1][0] . ', ' . $out[1][1] . "\n"; ?>
|
L'exemple ci-dessus va afficher : <strong>exemple : </strong>, <div align="left">un test</div> exemple : , un test |
Ainsi, $out[0] est un tableau qui contient les résultats qui satisfont le masque complet, et $out[1] est un tableau qui contient les balises entre > et <. | - PREG_SET_ORDER
Les résultats sont classés de telle façon que $matches[0] contient la première série de résultats, $matches[1] contient la deuxième, etc. Exemple 2. Exemple avec preg_match_all() et PREG_SET_ORDER | <?php preg_match_all("|<[^>]+>(.*)</[^>]+>|U", "<strong>exemple : </strong><div align=\"left\">un test</div>", $out, PREG_SET_ORDER); echo $out[0][0] . ', ' . $out[0][1] . "\n"; echo $out[1][0] . ', ' . $out[1][1] . "\n"; ?>
|
L'exemple ci-dessus va afficher : <strong>exemple : </strong>, exemple : <div align="left">un test</div>, un test |
Dans ce cas, $matches[0] est la première série de résultat, et $matches[0][0] contient le texte qui satisfait le masque complet, $matches[0][1] contient le texte de la première parenthèse capturante, etc. De même, $matches[1] contient le texte qui satisfait le masque complet, etc. |
Exemple 4. Recherche les couples de balises HTML (gourmand) | <?php // Cet exemple utilise les références arrières (\\2). // Elles indiquent à l'analyseur qu'il doit trouver quelque chose qu'il // a déjà repéré un peu plus tôt // le nombre 2 indique que c'est le deuxième jeu de parenthèses // capturante qui doit être utilisé (ici, ([\w]+)). // L'antislash est nécessaire ici, car la chaîne est entre guillemets doubles $html = '<strong>Texte en gras</strong><a href="salut.html">clique moi</a>'; preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $html, $matches, PREG_SET_ORDER); foreach ($matches as $val) { echo "matched: " . $val[0] . "\n"; echo "part 1: " . $val[1] . "\n"; echo "part 2: " . $val[3] . "\n"; echo "part 3: " . $val[4] . "\n\n"; } ?>
| L'exemple ci-dessus va afficher : Trouvé : <strong>Texte en gras</strong> partie 1 : <strong> partie 2 : Texte en gras partie 3 : </strong>
Trouvé : <a href="salut.html">clique moi</a> partie 1 : <a href="salut.html"> partie 2 : clique moi partie 3 : </a>
|
|
mardi 18 octobre 2005 à 18:40:19 |
Re : expression reguliere fort hardue!

Anthomicro
|
Merci je sais ce qu'est un moteur de template, et malgré ton post sur developpez.com je n'en comprends pas vraiment plus... m'enfin bon tant pis. Bon courage. a +
|
|
mardi 18 octobre 2005 à 21:32:50 |
Re : expression reguliere fort hardue!

coucou747
|
xslt est bien plus approprié pour ce genre de choses... In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy [ Lien ]
|
|
mercredi 19 octobre 2005 à 09:09:05 |
Re : expression reguliere fort hardue!

hansap
|
bonjours J_G, j'ai lut avec une (tres) grande attention tout ce que tu m'a dit, mais avant tout, je vait essayer d'exposer un pb tres simple : je fait : <? $chaine = " <li> ne pas me prendre mais quand meme pris </li> <li> je veut cette partie </li> <li> ne pas me prendre et ca marche </li> "; preg_match("/ <li>.*je veut cette partie.*<\/li>/sU", $chaine, $occurence); var_dump($occurence); ?> et j'obtient : array(1) { [0]=> string(86) "<li> ne pas me prendre mias quand meme pris </li> <li> je veut cette partie </li>" }
donc, la ou je ne devrait avoir que la ligne du milieu, j'aen ai deux... bug de preg_match?
Je pense donc etre en presence d'un bug... je suis en php 4.2.3, qi kkun pouvait essayer de reproduire ce petiti code pour moi... merci anthomicro, j'ai ete un peu sec, dsl... et coucou747 (ainsi que J_G) pensez vous que ce pourrait etre faisable de facon claire et conscise avec XSLT? je presente ca pour une action BTS, et la presentation doit primer sur l'optimisation, je pense...
|
|
mercredi 19 octobre 2005 à 09:51:55 |
Re : expression reguliere fort hardue!

malalam
|
Hello, je peux ? Hansap, je ne comprends pas moin non plus complètement. Tu as 3 balises <li>, et tu veux le contenu de la seconde, dans ton dernier exemple...? Quelle est la règle pour ton moteur ? Tu dois avoir des spécs, je suppose, donne les. Ensuite...html, ça vient du sgml. xml aussi. xhtml aussi, donc. Bref, la seule différence notable entre le html, et xml, c'est qu'html n'est pas sensible à la casse, xml si. Mais la structure es la même. Donc, quand je lis que xslt peut t'apporter une solution...je soutiens :-) Mais tu n'as peut-être pas besoin de passer par xslt. En fait ce qui devrait t'intéresser, c'est XPath. Tu peux 'en servir dans un fichier xsl...c'est pratique, et efficace. TU accèdes au noeud que tu veux, à sa valeur, attribut, tu peux boucler sur tes noeuds etc...si tu veux le 3ème <li> sur une liste de deux, ça va te prendre 1 ligne en XPath. Et en plus, tu peux 'en servir directement avec php. Cherche XPath, XSLT, sur le web, et XPath sur php.net aussi.
|
|
mercredi 19 octobre 2005 à 09:56:38 |
Re : expression reguliere fort hardue!

malalam
|
Quant à ton expression régulière (j'ai oublié entre temps lol), ce n'est pas un bug de preg_match, mais ton expression qui est fausse. <?php $chaine = " <li> ne pas me prendre mais quand meme pris </li> <li> je veut cette partie </li> <li> ne pas me prendre et ca marche </li> "; preg_match("/<li>*[je veut cette partie]*<\/li>/sU", $chaine, $occurence); var_dump($occurence); ?>
|
|
mercredi 19 octobre 2005 à 10:01:28 |
Re : expression reguliere fort hardue!

hansap
|
JG : Pour isoler le contenu des <li> ici </li> : $matches= array(); preg_match_all("@<li>((\w|\s)*)</li>@", $matches, $text_html); echo nl2br(print_r($matches,true));
effectivement, ca marche, cependant, tu travail sur un char unique : (\w|\s)* qui se repete tantque pas </li> (bizarre, ici y'a pas a echapper le "/"... un effet des "@"?? )
je pourrait essayer de fonctionner avec qqchose du genre de ((?!maChaine)|\w|\s) mais jusqu'a present... ca marche pas... merci de ta piste...
|
|
Cette discussion est classée dans : prendre, expression, reguliere, block, mias
Répondre à ce message
Sujets en rapport avec ce message
Expression reguliere [ par wonesek ]
$mois = array( "01" => "Janvier", "02" => "Fevrier", "03" => "Mars", "04" => "Avril", "05" => "Mai", "06" => "Juin", "07" => "Juillet", "08" =>
expression reguliere [ par wonesek ]
bonsoir tout le monde j'ai actullement un petit probleme avec une expression reguliere PCRE:code source------------------$a = "[a]1[/a][a]2[/a]";preg_
expression reguliere [ par Rochon ]
Avec les expressions regulière je voudrait que tout les mots print et if qui sont entre des balises et soient surlignés:j'utilisent: $t
expression reguliere pour balise HTML [ par nezdeboeuf62 ]
Bonjour tout le monde,Voila j'aurais voulu savoir si quelqu'un connaissait une regexp pour decrire une balise HTML. En fait plus précisément il m'en f
Expression reguliere [ par pioug70 ]
Bonjour, Je suis null en expression reguliere je cherche a faire simplement cela Dans une variable contenant un fichier html je veux resortir un table
expression reguliere : formaliser ()* [ par aekold ]
Bonjour les phpseniens,je reste bloqué sur probleme dont je ne comprend pas la raison. Je vous explique a travers un exemple mon souci:objectif : récu
expression reguliere !!! [ par kangoo75 ]
bonjour à tous Connaitrez vous une expression reguliere qui permettrait de savoir si ce qui est rentré est sois un nombre flottant (ex : 2.6 ou 0.2 )
expression reguliere? [ par kangoo75 ]
bonjour à tous Connaitrez vous une expression reguliere qui permettrait de savoir si ce qui est rentré est sois un nombre flottant (ex : 2.6 ou 0.2 )
expression reguliere : image html vers bbcode [ par Full62 ]
bonjour,je veut utiliser une expression reguliere pour convertir mon code html vers du bbcode mais cela ne fonctionne pas...voici ce que j'ai mis ://
expression reguliere [ par David_monchy ]
Salut, je voudrais employer une expression régulière, mais je suis nul dans ce domaine. Comment savoir si il y a les balises et les remplacer par aut
Livres en rapport
|
Derniers Blogs
JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|