Je dois supprimer la chaîne de version des fichiers .css et .js et mettre à jour le chemin, afin que ce
if (strpos($html, $str) !== false) {
$html = substr_replace($str,'',45,49);
}
Devient ceci
<script type="text/javascript" src="/new/path/file.js"></script>
J'ai utilisé DomDocument et cela a très bien fonctionné, malheureusement il a cassé d'autres scripts dans le corps du document, donc j'ai besoin de trouver un méthode alternative. J'ai essayé les strpos, ce qui fonctionnait en quelque sorte, mais je n'ai renvoyé que la chaîne et pas tout le HTML.
Je suis en train de gratter un site et d'enregistrer les fichiers localement, je dois donc supprimer le contrôle de version et mettre chemins. La chaîne de version est générée avec git hash, donc même si la chaîne de hachage peut changer, elle sera toujours de 40 caractères. C'est ce que j'essaie de supprimer ...
Modifier Je jouais avec quelque chose comme ça, mais ça ne donnait pas ce que je voulais, alors j'ai ouvert cette question; Je n'ai tout simplement pas assez d'expérience avec les regex ...
<script type="text/javascript" src="/path/file.js?version=c0af26a3543415d554bae1b8de55874b7736071d"></script>
3 Réponses :
Voir preg_replace :
$HTML='<script src="/path/file.js?version=c0af26a3543415d554bae1b8de55874b7736071d"></script>';
$Result=preg_replace('/".*\/([\w\d]+)\.(css|js).*"/','/new/path/${1}.${2}',$HTML);
echo"$Result";
Vraiment proche! Mais renvoie ce au lieu de
Il retourne en fait comme vous l'avez demandé (
\?(.*?) - Représente le deuxième groupe de capture paresseusement correspondant à ? et tout ce qui se trouve avant le premier ".
(".*) - Représente le troisième groupe correspondant avidement correspondant à tout ce qui suit.
$1$3 - Pour la pièce de rechange puisque vous devez vous débarrasser du deuxième groupe de capture; ajoutez simplement le premier et le troisième ensemble.
Vous pouvez trouver la démo de l'expression régulière ci-dessus dans ici.
Exemple d'implémentation en php:
XXX
Vous pouvez trouver l'exemple d'exécution du code ci-dessus dans ici. fort>
Montrez ce que vous avez essayé?
La conversion des correspondances du modèle suivant en chaînes vides fonctionne pour l'exemple, mais vous seul pouvez dire si cela fonctionne dans votre cas général:
/(?<=\.js)[^>"\r\n */. ref C'est le problème de poser une question en termes d'un seul exemple .@CarySwoveland Le problème est que je racle un site et je l'enregistre localement, donc les chemins et les versions doivent être mis à jour. La gestion des versions utilise git hash, donc même si la chaîne de version peut changer, elle sera toujours de 40 caractères. J'essaie simplement de comprendre comment les supprimer dans tout le document.
cela aide-t-il? Ou plus précisément this ?
@ Mandy8055 VRAIMENT proche! Malheureusement, il change également