comprendre une fonction regexp

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 : comprendre une fonction regexp

par Ryle » 22 avr. 2009, 14:15

Bah en ce qui me concerne, je vais en porter un de jugement, vu que par curiosité j'ai téléchargé l'bidule en question pour voir comment il fonctionnait. Résultat, pas moins de 8 appels à preg_match() ou preg_match_all() et patterns associés... :-*

Je vois pas bien l'intérêt de recommander une solution qui repose sur des expressions régulières pour éviter l'usage d'une ER ... A part coller 1000 lignes de code supplémentaire à interpréter dans les dents de php, va vraiment falloir chercher pour trouver un argument convaincant :-s

par zeus » 21 avr. 2009, 16:36

Effectivement, je me demande pourquoi il ne faut pas utiliser d'ER :-k

Je ne donne pas de jugement sur la solution de Innocentus, mais les expressions régulières peuvent convenir tout de même ;)

par Invité » 21 avr. 2009, 15:57

personne ne confirme ou ne contredit ce qu'a dit innocentum?

par Invité » 18 avr. 2009, 17:40

pourquoi ne faut il pas utiliser une rexpression regulier pour les liens?

par Innocentus » 03 avr. 2009, 11:50

Tu ne dois pas utiliser une expression regulare pour l'extraction des liens hypertextes.
Mais tu peux utiliser une parser html: PHP Simple HTML DOM Parser

Inno

comprendre une fonction regexp

par Invité » 25 mars 2009, 14:05

Bonjour à tous,

Je souhaite modifier une fonction trouvée dans un logiciel open source:
	function convertInternalLink($body)
	{
		global $mainframe;

		$patterns = array();
		$replacements = array();
		$i = 0;
		$href_exp = "/href=\"(.*?)\"/";
		$link_exp =  "[^http:\/\/www\.|^www\.|^http:\/\/]";

		preg_match_all($href_exp, $body, $out, PREG_SET_ORDER);

		foreach ($out as $val)
		{
			$links = preg_match($link_exp, $val[1], $match, PREG_OFFSET_CAPTURE);

			if(!$links)
			{
				$patterns[$i] = 'href="'. $val[1] . '"';
				$replacements[$i] = 'href="'. JURI::root().$val[1] . '"';
				$body=str_replace($patterns[$i],$replacements[$i],$body);
				$i++;
			}
		}
		return $body;
	}
}
C'est une fonction qui traite du texte ($body) saisi à partir d'un éditeur wysiwig, dans le but de modifier les liens hypertextes.

Mon problème: lorsque je crée mon texte ($body), les liens sont comme ceci:
http://www.mondomaine.com/index.php?option=com_virtuemart&page=shop.browse&category_id=54&Itemid=2&lang=fr
Après passage dans la fonction, le même lien ressort comme ceci:
http://index.php/?option=com_virtuemart&page=shop.browse&category_id=54&Itemid=2&lang=fr
2 changements:
1- www.mondomaine.com/ a été supprimé de l'url
2- index.php? est devenu index.php/?

Je suppose que c'est la fonction ci dessus qui n'est pas au point, mais pas de support pour le logiciel.
Je viens donc poster ici, cherchant de l'aide pour comprendre la fonction et modifier ce qui ne fonctionne pas bien.

Merci à tous pour quelques conseil éclairés.