Aller au contenu

probleme avec fonction [function.preg-match]: Compilation failed: unrecognized character


pommeric

Sujets conseillés

Bonjour à tous, je vais tacher d'etre bref et precis.

Instalation joomla 1.0.15 stable, et template TERRAN TRIBUNE.

J'obtient cette ligne d'erreur:

Warning: preg_match() [function.preg-match]: Compilation failed: unrecognized character after (?< at offset 16 in /modules/rokmininews/helper.php on line 101

et voici la ligne de code incriminée:

preg_match("'src=(?:\"|\')?(?<img Src>[^>]*[^/].(?:jpg|JPG|bmp|gif|png))(?:\"|\')?'", $text, $matches );

Merci d'avance pour votre aide precieuse.

Lien vers le commentaire
Partager sur d’autres sites

"(?<" (dans "(?<img Src>")est le début d'une look-behind assertion (normalement suivie de = ou ! suivant qu'elle est positive ou négative). Il faudrait que tu escapes le "?" pour être traquille: il y a de nombreuses sub-patterns qui commencent par "(?".

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

(?<nom>pattern) est l'une des syntaxes alternatives pour nommer un sous-motif depuis PCRE 7.0 et (?P<nom>pattern) est la syntaxe pure PCRE qui fonctionnera aussi avec PHP4, ce qui semble être ton cas.

Mais si cette chose est la pointe de l'iceburg, peut-être qu'utiliser les dernières versions stables de PHP5 et Apache2 serait préférable car jusqu'à PCRE 7.6 l'espace n'est pas autorisé comme caractère dans le nom d'un sous-motif ! La dernière version stable de PCRE est la 7.8 que je n'ai pas pour tester.

preg_match("'src=(?:\"|\')?(?<img Src>[^>]*[^/].(?:jpg|JPG|bmp|gif|png))(?:\"|\')?'", $text, $matches );

Je n'utiliserai jamais joomla :blink:

Lien vers le commentaire
Partager sur d’autres sites

"(?<" (dans "(?<img Src>")est le début d'une look-behind assertion (normalement suivie de = ou ! suivant qu'elle est positive ou négative). Il faudrait que tu escapes le "?" pour être traquille: il y a de nombreuses sub-patterns qui commencent par "(?".

Jacques.

Jacques, je viens de faire ta manip qui a l'avantage de faire disparaitre les lignes d'erreurs mais qui ne permettent pas d'obtenir un fonctionnement optimal du module... Cela provoque l'absence d'image minature censée etre provoquée par cette partie du code....

(?<nom>pattern) est l'une des syntaxes alternatives pour nommer un sous-motif depuis PCRE 7.0 et (?P<nom>pattern) est la syntaxe pure PCRE qui fonctionnera aussi avec PHP4, ce qui semble être ton cas.

Mais si cette chose est la pointe de l'iceburg, peut-être qu'utiliser les dernières versions stables de PHP5 et Apache2 serait préférable car jusqu'à PCRE 7.6 l'espace n'est pas autorisé comme caractère dans le nom d'un sous-motif ! La dernière version stable de PCRE est la 7.8 que je n'ai pas pour tester.

Je n'utiliserai jamais joomla :blink:

Merci TIsha pour ton explication, mais malheureusement, je suis sur un hebergement gratuit, donc peu de chance de pouvoir faire evoluer par moi meme vers les bonnes versions stables. Il me rest donc l'option proposée en 1er: retoucher la ligne de code. Mais je ne suis pas du tout aussi bon que toi , pourrais tu m'indiquer ou faire les bonnes modifications sur cette ligne de code pour la rendre compatible.

Merci D'avance!

Lien vers le commentaire
Partager sur d’autres sites

Je ne connaissais pas la syntaxe utilisée (je pensais que c'était toi qui avais écrit la regexp, et que tu cherchais à "matcher" la chaîne <img Src>), alors qu'en fait il s'agit d'une sous-expression nommée avec une syntaxe qui n'est pas supportée par ta version de php/pcre. Ma "correction" est donc fausse (toujours difficile quand on n'a pas tout le contexte).

D'après ce que dit tisha_carpenter, les corrections à effectuer sont un peu plus complexes: il faut remplacer ?<img Src> par ?P<img_src> par exemple, mais il faudra remplacer les références à 'img Src' ailleurs dans le code par 'img_src'...

Bon courage...

Jacques.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...