Bestimmten String per RegEx ersetzen

Adan0s

Grünschnabel
Hallo,

ich möchte in einem HTML-Element alle Verlinkungen auf eine bestimmte URL, in dem fall attachment.php?... umschreiben.

Also z.B.

HTML:
<a href="http://www.domain.de/attachment.php?attachmentid=785"  title="Name:  Hits: Größe:  ">Anhang 785</a>

mit

HTML:
<a href="http://www.domain.de/attachment.php?attachmentid=785" id="attachment785"><img src="http://www.idgames.de/attachment.php?attachmentid=785&amp;thumb=1" /></a>

ersetzen. Alle anderen Links müssen unverändert bleiben.
Könnte mir jemand da behilflich bezüglich RegEx oder ähnliches sein? Theoretisch muss das Regex die ID abfangen, den ganzen alten String löschen und mit dem neuem String und der vorher entnommenen ID ersetzen.
Bin bezüglich RegEx absolut unfähig.

Grüße,
Adan0s
 
Doch. Aber es währe besser du versuchst mal etwas und kommst dann damit hierher.
Anonsten kannst du es in die Abteilung für kostenlose Stellenangebote verschieben.
 
Vielleicht noch jemand mit einem konstruktiven Beitrag?
Ich sagte bereits, dass ich mit Regular Expressions absolut nicht fit bin, deshalb bräuchte ich dabei Hilfe.
 
Vielleicht noch jemand mit einem konstruktiven Beitrag?
Ich sagte bereits, dass ich mit Regular Expressions absolut nicht fit bin, deshalb bräuchte ich dabei Hilfe.
Auch wenn du nciht Fit bist. Wenn wir dir hier eine Lösung presentieren, wirst du sie zwar anwednen können, nicht aber verstehen.

Wir können hier Schritt für Schritt dir helfen eine Lösung zu finden. Aber vorlegen will ich keine.
Beim Link von chmee hats auch eine Hlife für die gebräuchlichsten Ausdrücke.
(Hab auch grad keine Lust einfach so mal ne halbe Stunde zu investieren um den richtigen String zusammenzubrösmeln und zu testen)
 
@yaslaw: Sorry das ich dir jetzt in den Rücken falle, du hast im Prinzip natürlich recht. Aber ich wollte es jetzt mal für mich wissen.

@Adan0s: Sofern ich dich richtig verstanden habe, soll aus dem "Original Link" immer die ID herausgesucht werden und dann in den "neuen" Link eingesetzt werden

PHP:
<?php

$orig = '<a href="http://www.domain.de/attachment.php?attachmentid=785"  title="Name:  Hits: Größe:  ">Anhang 785</a>';

// findet die Position von "attachmentid=" im Link
$start = strpos($orig, "attachmentid=") + 13;
// Teil ab der oben ermittelten Position
$teil = substr($orig, $start);
// findet das erste Anführungszeichen nach der Zahl (im Beispiel 785)
$ende = strpos($teil, "\"");
// die Zahl selbst (im Beispiel 785)
$id = substr($orig, $start, $ende);

// setzt die entsprechende Zahl an die entsprechende Stelle
$neu = '<a href="http://www.domain.de/attachment.php?attachmentid=' .$id .'" id="attachment' .$id .'"><img src="http://www.idgames.de/attachment.php?attachmentid=' .$id .'&amp;thumb=1" /></a>';
echo $neu;

?>

Das ergibt dann folgenden HTML Code:

HTML:
<a href="http://www.domain.de/attachment.php?attachmentid=785" id="attachment785"><img src="http://www.idgames.de/attachment.php?attachmentid=785&amp;thumb=1" /></a>
 
Zuletzt bearbeitet:
Da Du mit strpos und statischer Position (+13) arbeitest, wird (könnte) jedes zusätzliche Zeichen, das sich einschleicht, den Erfolg vereiteln (zB weitere Get-Daten). Nein, dafür sollte wirklich Regex genommen werden, schneller, sauberer, sicherer..

mfg chmee
 
Ich geb ja zu mit regulären Ausdrücken kenne ich mich nicht wirklich aus und ich teste mir da eigentlich immer mehr was zusammen bis es klappt. Aber wie wäre es mit dieser Lösung:

PHP:
$orig = '<a href="http://www.domain.de/attachment.php?attachmentid=785"  title="Name:  Hits: Größe:  ">Anhang 785</a>';

preg_match("([0-9]{1,10})", $orig, $id);

$neu = '<a href="http://www.domain.de/attachment.php?attachmentid=' .$id[0] .'" id="attachment' .$id[0] .'"><img src="http://www.idgames.de/attachment.php?attachmentid=' .$id[0] .'&amp;thumb=1" /></a>';

echo $neu;

Gruß Thomas
 
Auch da wieder die Gefahr, dass etwas anderes gefunden wird. Beispiel:

HTML:
<a href="http://www.domain.de/attachment.php?site=12&thread=35&attachmentid=785"/>
Hier findet es die Variable von site. Als "Erkenner" muss attachmentid= drin sein.

mfg chmee
 
Zurück