probleme avec preg_replace

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 : probleme avec preg_replace

Re: probleme avec preg_replace

par entomokiller » 07 avr. 2012, 20:44

donc voila jme présente je m'appelle henry vous connaissez la suite...

bref mon interprétation du $ comme fin de chaine n'était pas éxactement juste, c'est bien la fin d'une chaine, mais de toute la chaine trouvée...

merci pour le coup de main :D

Re: probleme avec preg_replace

par entomokiller » 07 avr. 2012, 19:36

Même conseil :) (cherche bien jusqu'à ce que tu connaisses la page par coeur, voire même au delà :D ) :

http://fr2.php.net/manual/fr/reference. ... ifiers.php

( surtout les derniers... )
dejas je n'arrive pas à ancrer mes masques, le A ne fonctionne pas et impossible de placer un ^ en début de chaine, ça pourrait venir d'une directive de configuration à changer tu pense?

pour le reste la casse et l'utf8 vu que je cré mes documents avec c'est fait, pour le . j'ai ajouté s comme ça c'est clair, l'extra on oublie et ungreedy je ne comprend pas tres bien à quoi ça sert donc comme ça a l'air d'économiser des ressources je le met par précaution, aprés ma syntaxe
~(<section>)(.*)(</section>)$~siuUx
ça fait 3 masques simples pour l'instant donc ça m'a l'air plutot logique

et pourquoi si je fait ~<section>([.+])</section>$~siuUx (si je met une classe de caracteres dans mon sous masque qui indique n'importe quel caracteres) il ne me renvoi rien du tout comme resultat?

Re: probleme avec preg_replace

par Calimero » 07 avr. 2012, 19:08

Même conseil :) (cherche bien jusqu'à ce que tu connaisses la page par coeur, voire même au delà :D ) :

http://fr2.php.net/manual/fr/reference. ... ifiers.php

( surtout les derniers... )

Re: probleme avec preg_replace

par entomokiller » 07 avr. 2012, 18:31

Il y a flex et yacc qui sont destinés à ce genre de traitement.
En effet, il y a aussi l'extension DOM.

Si tu veux continuer avec les regexp, la méthode de débuggage est simple :
- si ta regexp ne ramène actuellement rien, simplifie-la (en enlevant des morceaux...) jusqu'à trouver la partie bloquante dans ton motif.
- une fois débloqué, tu peux modifier ta regexp et régler le problème.

A un moment ou à un autre tu auras sans doute besoin de te pencher sur les modifieurs : http://fr2.php.net/manual/fr/reference. ... ifiers.php

@+
pour l'instant j'ai été obligé d'ajouter le s mais le résultat est encore tres incertain:
<?php

$texte = '
	<section>
		<div>hello world...</div>
	</section>
	<section>
		<div>sun is shining!</div>
	</section>';


	if(preg_match('~<section>(.*)</section>$~s',$texte,$matches))
		print_r($matches);


?>
résultat, il est allé chercher la derniere occurence de </section> au lieu de s'arréter et de reprendre, meme pas la peine de faire un match_all je sais que je ne suis pas tres doué pour les regex mais là je commence vraiment à etre déçu :?
Array
(
    [0] => <section>
		<div>hello world...</div>
	</section>
	<section>
		<div>sun is shining!</div>
	</section>
    [1] => 
		<div>hello world...</div>
	</section>
	<section>
		<div>sun is shining!</div>
	
)

Re: probleme avec preg_replace

par Calimero » 07 avr. 2012, 10:12

Il y a flex et yacc qui sont destinés à ce genre de traitement.
En effet, il y a aussi l'extension DOM.

Si tu veux continuer avec les regexp, la méthode de débuggage est simple :
- si ta regexp ne ramène actuellement rien, simplifie-la (en enlevant des morceaux...) jusqu'à trouver la partie bloquante dans ton motif.
- une fois débloqué, tu peux modifier ta regexp et régler le problème.

A un moment ou à un autre tu auras sans doute besoin de te pencher sur les modifieurs : http://fr2.php.net/manual/fr/reference. ... ifiers.php

@+

Re: probleme avec preg_replace

par sirakawa » 07 avr. 2012, 08:39

Il y a flex et yacc qui sont destinés à ce genre de traitement.
Je viens d'écrire le fichier flex (mon premier fichier flex, car à écouter les gourous, j'avais cru qu'il fallait avoir fait au moins Polytechnique avancée pour pouvoir envisager d'espérer y comprendre quelque chose; et il est vrai que la littérature Internet sur le sujet est assez indigeste)
qui règle <br> => <br /> et
<input..> => <input ... />
je n'irai pas plus loin, car je n'en ai pas besoin, mais je pense qu'on pourrait sans grand mal vérifier que les balises sont équilibrées, mais pas les corriger automatiquement.
C'est très simple, et les regexp utilisées sont assez simples, car on divise le problème en morceaux et c'est flex qui crée le code adapté.

probleme avec preg_replace

par entomokiller » 07 avr. 2012, 03:06

bonjour, je suis en ce moment en train d'aprendre à me servir du html5 et je traite mon html pour passer du 4.1 au 5. et j'ai un gros probleme avec preg_replace, si quelqu'un a une idée...
<?php

// donc je cré un article, avec un entete et 2sections, une pour les paragraphes et une pour les annotations

$content = '
		<article>

			<header>
				<h4>LE VIEIL HOMME ET LA MER, (<i>extrait</i>)</h4>
			</header>

			<section>
				<p>Il était une fois un vieil homme, tout seul dans son bateau, qui pêchait au milieu du Gulf Stream. En quatre-vingt-quatre jours, il n\'avait pas pris un poisson. Les quarante premiers jours, un jeune garçon l\'accompagna ; mais au bout de ce temps, les parents du jeune garçon déclarèrent que le vieux était décidément et sans remède salao, ce qui veut dire aussi guignard qu\'on peut l\'être. On embarqua donc le gamin sur un autre bateau, lequel, en une semaine, ramena trois poissons superbes.</p>
				<p>Chaque soir le gamin avait la tristesse de voir le vieux rentrer avec sa barque vide. Il ne manquait pas d\'aller à sa rencontre et l\'aidait à porter les lignes serrées en spirales, la gaffe, le harpon, ou la voile roulée autour du mât. La voile était rapiécée avec de vieux sacs de farine ; ainsi repliée, elle figurait le drapeau en berne de la défaite.</p>
				<p>Le vieil homme était maigre et sec, avec des rides comme des coups de couteau sur la nuque. Les taches brunes de cet inoffensif cancer de la peau que cause la réverbération du soleil sur la mer des Tropiques marquaient ses joues ; elles couvraient presque entièrement les deux côtés de son visage ; ses mains portaient les entailles profondes que font les filins au bout desquels se débattent les lourds poissons. Mais aucune de ces entailles n\'était récente : elles étaient vieilles comme les érosions d\'un désert sans poissons. </p>
			</section>

			<section>
				<div>~ ERNEST HEMINGWAY ~</div>
			</section>

		</article>';

// je fait ma preg, normalement dans une boucle qui récupere toute mes balises
// j'ai ajouté [^<] pour qu'il ne s'arrete qu'à la prochaine balise de fermeture complete
// et m pour le multi lignes
// mais sans résultat...

$content = preg_replace("~^(<section>)([^<]*[.*])(</section>)$~m","",$content);

// j'affiche $content 

echo $content;

?>