Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   PHP: preg_replace (https://www.delphipraxis.net/160610-php-preg_replace.html)

Die Muhkuh 22. Mai 2011 19:12

PHP: preg_replace
 
Hi,

ich hab gerade ein Schlauch auf der Leitung.

Ich möchte in einem HTML-Text alle <img src="bla.jpg" /> umschreiben in <img src="../bla.jpg" />.

Folgender Versuch:

Code:
$matches = array();
$cnt = preg_match_all('#<img(.*?)src="(.*?)"(.*?)/>#ms', $text, $matches);

$replacements = array();
$patters = array();

for ($i = 0; $i < $cnt; $i++)
{
    $patters[] = '#<img(.*?)src="(.*?)"(.*?)/>#ms';
    $replacements[] = '<img ' . $matches[1][$i] . ' src="../' . $matches[2][$i] . '" ' . $matches[3][$i] . ' />';
}

$text = preg_replace($patters, $replacements, $text);
Geht schief, klar. Es fehlt quasi beim replace irgendeine Art "offset". Ich glaube, ich mach es mir gerade schwerer, als ich es eigentlich machen müsste.

Jemand fix eine Idee?

Namenloser 22. Mai 2011 20:07

AW: PHP: preg_replace
 
Kannst du mal kurz beschreiben, was passiert? Mir fällt es etwas schwer, das so nachzuvollziehen.

Ansonsten:
  • Wozu ist
    PHP-Quellcode:
    $patters[] = '#<img(.*?)src="(.*?)"(.*?)/>#ms';
    ? Sehe nicht, dass das irgendwo noch mal verwendet würde.
  • Müsste es nicht heißen
    PHP-Quellcode:
    $matches[$i][1]
    statt
    PHP-Quellcode:
    $matches[1][$i]
    ? (bin mir da selbst gerade nicht sicher)

[edit]
Ach jetzt kapier ich, was du mit deinem Code zu erreichen versuchst. Du kannst dir das
PHP-Quellcode:
preg_match_all
einfach sparen.
PHP-Quellcode:
preg_replace
ersetzt per default alle Vorkommnisse des gesuchten Musters.
[/edit]

Matze 22. Mai 2011 20:08

AW: PHP: preg_replace
 
Hallo Manu,

keine Ahnung, ob ich dich richtig verstanden habe:

PHP-Quellcode:
$text = preg_replace('#<img src="([a-zA-Z0-9._-]+)" />#', '<img src="../$1" />', $text);
Also ohne Schleife, nur der eine Aufruf.

Die Muhkuh 22. Mai 2011 20:14

AW: PHP: preg_replace
 
Zitat:

Zitat von Matze (Beitrag 1102234)
Hallo Manu,

keine Ahnung, ob ich dich richtig verstanden habe:

PHP-Quellcode:
$text = preg_replace('#<img src="([a-zA-Z0-9._-]+)" />#', '<img src="../$1" />', $text);
Also ohne Schleife, nur der eine Aufruf.

Passt. Ich Dödel hatte vergessen, dass man ja per Backreferences darauf zugreifen kann (was ich letztendlich mit meiner Schleife erreichen wollte) :wall:

ulilüding 22. Mai 2011 20:21

AW: PHP: preg_replace
 
Hi Muhkuh,
also, ich würde mir die arrays patters und replacements einfach mal mit echo(array-element) anzeigen lassen. Dann siehst Du ja, was da was in realiter ersetzt. Und ob die arrays $cnt Einträge haben. usw
LG Uli

s.h.a.r.k 22. Mai 2011 22:26

AW: PHP: preg_replace
 
Zitat:

Zitat von ulilüding (Beitrag 1102240)
Hi Muhkuh,
also, ich würde mir die arrays patters und replacements einfach mal mit echo(array-element) anzeigen lassen. Dann siehst Du ja, was da was in realiter ersetzt. Und ob die arrays $cnt Einträge haben. usw
LG Uli

Wenn dann doch bitte eher print_r oder var_dump, da druckt es das ganze Array und nicht nur ein Element.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz