OVH Cloud OVH Cloud

regex & expression reguliere

18 réponses
Avatar
stock_fluxy
Bonjour,

Je voudrais faire quelque chose de très simple mais je ne sais pas
comment mis prendre :-(

Je m'explique, je souhaite uniquement récupérer le path d'un fichier
sur une balise <img />.

Exemple :

J'ai :

<img src='IMG/rubon2.jpg'
alt='logo RUBRIQUE 2' style='border-width: 0px;' class='spip_logos' />

ou

<img HEIGHT=585 WIDTH=320 src='IMG/rubon2.jpg'
alt='logo RUBRIQUE 2' style='border-width: 0px;' class='spip_logos' />

Je veux uniquement récupérer :

IMG/rubon2.jpg dans une variable

si quelqu'un est caller en regex ca m'aiderais.

Merci.

Bonne journée.

Flux

8 réponses

1 2
Avatar
Steuf

Oh non, pas encore cette vieille légende !

Les simples quotes ont *toujours* été standard en HTML et en XHTML, et
*tous* les navigateurs le savent (mais pas les concepteurs, hélas).
<http://groups.google.fr/group/fr.comp.lang.php/msg/299270e3fe8b252b>.


Oui cette synthaxe est permise, mais qui dit qu'elle le restera ? C'est
comme la synthaxe du <? ?> en PHP ( Bouuuu que c'ets moche ;-) ), oui
elle fonctionne, et non ce n'est pas une bonne synthaxe ( J'appel ça des
synthaxe de fénéants moi ).

à tort...



À raison. Lire les normes citées dans mon précédent article.


A tort puisque comme le dit la suite de mon message ( Qui tu as ignoré..
) il y a deux raisons à cela, l'une en html, l'autre en PHP,
l'utilisation de double quotes dans un echo en PHP pour afficher juste
des dixaines de lignes de code HTML ne sert qu'à faire perdre des
performances puisqu'il parse le code Html pour rien. L'utilisation de
simple quote est ici la plus logique ( Et celle à utiliser ), ce qui
inclu donc l'écriture du code HTML en double code, ton argument qui dit
que cela empéche la lisibilité du code PHP tombe ici à l'eau.

Donc autant pour moi les simple quote en html sont une abération mais
autorisé, autant il y avait un deuxième argument, celui en PHP qui fait
qu'en HTML il est bien plus logique d'utiliser des doubles quote de des
simple.

--
Mon nouveau bébé : http://exinsidephp.free.fr


Avatar
Steuf

1) Parce que les simple quotes sont autorisées en HTML et XHTML.


Ca tient la route mais comme je dis, ce qui est autorisé n'est pas
forcement ce qu'il y a de mieux...

2) Surtout, parce qu'elles simplifient tellement le codage en PHP.


Non


Ça commence à devenir un marronnier dans ce forum, mais personnellement
je trouve que :
echo "<img src='$fichier' alt='$alternatif' />";
est plus simple et plus lisible que :
echo "<img src="$fichier" alt="$alternatif" />";
et que :
echo '<img src="'.$fichier.'" alt="'.$alternatif.'" />';


La dernière est bien plus lisible car les variables profite de la
colorisation de l'éditeur avec lequel on code. Si vous utilisez la
première solution tout votre code est de la même couleur ( Super facile
pour retrouver les variables s'il y a une centaine de ligne de code en
html... ).

Deuxième raison d'un point de vue logique et de performance, il est
complétement illogique d'utiliser des doubles quote dans un echo juste
pour afficher du code HTML, on parse 90% du code html pour rien;
l'utilisation des simple quote est requise car le parseur n'a pas besoin
de chercher les variables dans le tas de code PHP, il tombe directement
dessus en concaténant.


Donc je ne suis toujours pas d'accord, la première raison ok on passe,
mais pour la deuxième il va falloir vous accorcher pour me faire changer
d'avis en me prouvant que ce que je dis est faux...

--
Mon nouveau bébé : http://exinsidephp.free.fr

Avatar
Guillaume Bouchard
Olivier Miakinen wrote:
Pourquoi tous le monde n'utilise pas des doubles quotes pour ces
attributs, cela simplifierait tellement le codage...



Bon, je vais réecrir ma phrase :

"Pourquoi il a fallu qu'ils inventent deux trucs differents et que 50 %
des gens en utilise un et que 50 % des gens utilisent l'autre ?"

Ça commence à devenir un marronnier dans ce forum, mais personnellement
je trouve que :
echo "<img src='$fichier' alt='$alternatif' />";
est plus simple et plus lisible que :
echo "<img src="$fichier" alt="$alternatif" />";
et que :
echo '<img src="'.$fichier.'" alt="'.$alternatif.'" />';


echo sprintf('<img src="%s" alt="%s" />',$fichier,$alternatif);
Mon préferé :)

--
Guillaume.


Avatar
ftc
echo sprintf('<img src="%s" alt="%s" />',$fichier,$alternatif);
Mon préferé :)



Et le plus rapide, même si ça se joue à quelques millionièmes de seconde.

Une écriture du style:
'<img src="'.$fichier.'" alt="'.$alternatif.'" /> qui est la plus
lisible avec un éditeur à coloration syntaxique n'est pas la plus
efficace. PHP va devoir allouer de la mémoire 5 fois successivement pour
construire la chaine puisque les concaténations vont se faire les unes
après les autres et non en une seule fois.


Une astuce quand on a beaucoup de chaines à concaténer est d'utiliser
l'output buffering.

ob_start();
for ( $i=0; $i<10000; $i++ ) {
echo $i;
}
$content = ob_get_contents();

est beaucoup plus rapide que:
for ( $i=0; $i<10000; $i++ ) {
$content .= $i;
}

Avatar
loufoque
ftc a dit le 26/07/2005 à 15:54:

ob_start();
for ( $i=0; $i<10000; $i++ ) {
echo $i;
}
$content = ob_get_contents();

est beaucoup plus rapide que:
for ( $i=0; $i<10000; $i++ ) {
$content .= $i;
}


Ça devrait pourtant se valoir, étant donné que c'est la même chose, à la
seule différence que dans le premier exemple, la variable est interne à PHP.

Avatar
ftc
ftc a dit le 26/07/2005 à 15:54:

ob_start();
for ( $i=0; $i<10000; $i++ ) {
echo $i;
}
$content = ob_get_contents();

est beaucoup plus rapide que:
for ( $i=0; $i<10000; $i++ ) {
$content .= $i;
}



Ça devrait pourtant se valoir, étant donné que c'est la même chose, à la
seule différence que dans le premier exemple, la variable est interne à
PHP.


Non car dans la première solution, la chaine est directement envoyée
dans un buffer dont l'allocation mémoire est faite par bloc ( valeur
fixée dans php.ini, 4096 octets par défaut ) tandis que dans la seconde,
on se retrouve avec 10000 allocations mémoires pour stocker la chaine.


Avatar
Olivier Miakinen

Les simples quotes ont *toujours* été standard en HTML et en XHTML, et
*tous* les navigateurs le savent (mais pas les concepteurs, hélas).
<http://groups.google.fr/group/fr.comp.lang.php/msg/299270e3fe8b252b>.


Oui cette synthaxe est permise, mais qui dit qu'elle le restera ?


Le W3C, les RFC, et toute la communauté des utilisateurs du Web.
D'ailleurs (cauchemardons un peu) si jamais une syntaxe devait
disparaître un jour, pourquoi serait-ce celle avec les guillemets
simples plutôt que celle avec les doubles ? Les deux sont à égalité
dans les normes.

C'est comme la synthaxe du <? ?> en PHP ( Bouuuu que c'ets moche ;-)
), oui elle fonctionne, et non ce n'est pas une bonne synthaxe (


Ça n'a rien à voir, parce que cette syntaxe ne concerne que les serveurs
et pas les clients. Remplace <? ?> par <?php ?> ou par <?steuf ?> si tu
le veux : du moment que le format de ton fichier est compatible avec
l'interpréteur de ton serveur web, et que le fichier HTML rendu est le
même, cela fonctionnera toujours pareil sur les navigateurs du monde entier.

J'appel ça des synthaxe de fénéants moi ).


J'aurais des choses à dire sur la synthaxe, mais je m'abstiendrai car ce
n'est pas le bon groupe...

à tort...


À raison. Lire les normes citées dans mon précédent article.


A tort puisque comme le dit la suite de mon message ( Qui tu as ignoré..
) il y a deux raisons à cela, l'une en html, l'autre en PHP,


Je l'ai ignorée parce que la raison HTML était fausse, et que la raison
PHP est insignifiante, voir plus loin.

l'utilisation de double quotes dans un echo en PHP pour afficher juste
des dixaines de lignes de code HTML ne sert qu'à faire perdre des
performances puisqu'il parse le code Html pour rien. L'utilisation de
simple quote est ici la plus logique ( Et celle à utiliser ), ce qui
inclu donc l'écriture du code HTML en double code,


D'autres ont répondu à ma place sur les « pertes de performance » en
question. Quand tu en seras à vouloir grapiller des microsecondes sur
l'interprétation des chaînes avec guillemets doubles au lieu de chercher
à gagner des dixièmes de secondes (voire des secondes) sur le reste, tu
me montreras ton code pour voir.

ton argument qui dit que cela empéche la lisibilité du code PHP tombe
ici à l'eau.


Je ne vais pas jusqu'à dire que cela *empêche* la lisibilité, mais pour
moi ça la gène certainement.



En réalité, le seul vrai argument, auquel je n'avais pas pensé mais
que tu as donné dans un autre article, c'est que ceux qui utilisent
un éditeur syntaxique profitent de la colorisation des variables quand
elles sont en dehors des chaînes.

Néanmoins, j'ai deux contre-arguments à lui opposer :
1) Pour ma part je n'utilise pas d'éditeur syntaxique car je n'aime
pas voir un code transformé en arbre de noël. Je reconnais bien
volontiers que mon cas ne soit pas une généralité, mais le
second contre-argument est encore plus décisif :
2) Un bon éditeur syntaxique adapté à PHP devrait savoir détecter
les variables incluses dans des chaînes entre guillemets doubles,
et aussi dans la syntaxe HereDoc. S'il ne le fait pas, à quoi bon
utiliser un éditeur syntaxique ?

Donc autant pour moi les simple quote en html sont une abération mais
autorisé, autant il y avait un deuxième argument, celui en PHP qui fait
qu'en HTML il est bien plus logique d'utiliser des doubles quote de des
simple.


Les arguments du style « c'est une aberration » ou « c'est plus
logique », tant qu'ils ne seront pas soutenus par des raisons un peu
plus objectives, restent de simples arguments d'autorité, donc sans
aucune valeur.

Cordialement,
--
Olivier Miakinen



Avatar
Antoun
Steuf wrote:

1) Parce que les simple quotes sont autorisées en HTML et XHTML.



Ca tient la route mais comme je dis, ce qui est autorisé n'est pas
forcement ce qu'il y a de mieux...


c'est toi qui le dis...

Ça commence à devenir un marronnier dans ce forum, mais personnellement
je trouve que :
echo "<img src='$fichier' alt='$alternatif' />";
est plus simple et plus lisible que :
echo "<img src="$fichier" alt="$alternatif" />";
et que :
echo '<img src="'.$fichier.'" alt="'.$alternatif.'" />';



La dernière est bien plus lisible car les variables profite de la
colorisation de l'éditeur avec lequel on code. Si vous utilisez la
première solution tout votre code est de la même couleur


non, pas tout mon code, toute ma chaîne. Ce qui me permet effectivement
de l'isoler facilement quand je lis mon code. Pour repérer les variables
à l'intérieur de la chaîne interprétée, je vais te donner un bon truc :
elles commencent toutes par $

( Super facile
pour retrouver les variables s'il y a une centaine de ligne de code en
html... ).


ça n'a absolument aucun intérêt de mettre une centaine de ligne de HTML
dans un echo. Je rappelle que le PHP n'est pas destiné à faire du CGI
(même s'il peut le faire), mais du code serveur embarqué sur une page de
code HTML.

Je vais enfoncer qq portes ouvertes, mais en fait tu veux nous faire
raisonner sur un cas comme ça :

<?php
echo "<html>
... 100 lignes de HTML avec trois variables PHP...
</html>" ;
?>

mais ce cas est plutôt supposé se présenter comme ça :

<html>
... 25 lignes de HTML
<?php echo $var1 ; ?>
... 25 lignes de HTML
<?php echo $var2 ; ?>
... 25 lignes de HTML
<?php echo $var3 ; ?>
... 25 lignes de HTML
</html>

désolé pour ces évidences, mais je trouve que cela remet l'argument du
"code parsé pour rien" à de plus justes dimensions...

Deuxième raison d'un point de vue logique et de performance, il est
complétement illogique d'utiliser des doubles quote dans un echo juste
pour afficher du code HTML, on parse 90% du code html pour rien;


dans <img src='$fichier' alt='$alternatif' />, il y a 19 caractères de
PHP et 21 de HTML... donc on ne parse pas "90% du code html pour rien",
on parse une partie raisonnable de quelques petites chaînes pour
rien.... cf. ci-dessus.

l'utilisation des simple quote est requise car le parseur n'a pas besoin
de chercher les variables dans le tas de code PHP, il tombe directement
dessus en concaténant.


etc...

Donc je ne suis toujours pas d'accord, la première raison ok on passe,
mais pour la deuxième il va falloir vous accorcher pour me faire changer
d'avis en me prouvant que ce que je dis est faux...


Pas du tout. C'est toi qui a décidé tout seul dans ton coin que notre
manière de coder était mauvaise, donc c'est à toi de nous donner des
raisons convaincantes.


Antoun


1 2