PHP RegEx

Von: , Frage gestellt am Do, 12. Mär 2009

Hallo zusammen.

Ich habe einen String, dieser String beinhaltet: zB
$string = '<a name="asdf"><img src="anchor.png"></a>';

Nun will ich beim Submit diesen String über womöglich RegEx formatieren, dass das <img> aus dem <a></a> verschwindet.
Also
$neuString = '<a name="asdf"></a>';

Jedoch beim Zurücklesen der Daten, möchte ich das $neuString zu $string wird also sprich, den Schritt wieder rückgängig machen, es wird aus $neuString wieder $string = '<a name="asdf"><img src="anchor.png"></a>';

Wie kann ich das angehen?

Gruß und Dank,
Sebastian

4 Antworten zu dieser Frage

  1. Antwort von nach 12 Stunden 2 hilfreich
    Re: PHP RegEx <a name='asdf'><img></a>

    Hallo Ich habe einen String, dieser String beinhaltet: zB
    $string = '<a name="asdf"><img src="anchor.png"></a>';
    Nun will ich beim Submit diesen String über womöglich RegEx
    formatieren, dass das <img> aus dem <a></a> verschwindet.
    Also
    $neuString = '<a name="asdf"></a>';
    Jedoch beim Zurücklesen der Daten, möchte ich das $neuString
    zu $string wird also sprich, den Schritt wieder rückgängig
    machen, es wird aus $neuString wieder $string = '<a
    name="asdf"><img src="anchor.png"></a>';
    Wie kann ich das angehen?
    Wozu?

    Ich hab das jetzt drei mal gelesen und kann
    mir nicht vorstellen, wozu das gut sein soll.

    Was bedeutet "beim Zurücklesen der Daten"?

    Hmm.

    Grüße

    CMБ

    • Antwort von nach einem Tag 0 hilfreich
      Re^2: PHP RegEx <a name='asdf'><img></a>

      Hallo CMБ. Wozu?
      Der <a name="asdf"><img src="anker.png"/></a>-String soll in einem Richtext-Editor verdeutlichen, dass hier ein Anker vorhanden ist. Jedoch beim Speichern des Inhalts ist dieses Bild nicht von Notwendigkeit. Also sprich, wenn man den Artikel auf der Homepage ansurft, soll dieser Anker nicht ersichtlich sein. also aus <a name="asdf"><img src="anker.png"/></a> wird <a name="asdf"></a>. Was bedeutet "beim Zurücklesen der Daten"?
      Nun möchte der User aber den vorher gespeicherten Artikel wieder ändern und muss nun sehen, da liegt ein Anker. Also aus <a name="asdf"></a> wird <a name="asdf"><img src="anker.png"/></a>.

      Hoffe du verstehst was ich meine.

      Gruß Sebastian

  2. Antwort von nach einem Tag 1 hilfreich
    Re: PHP RegEx <a name='asdf'><img></a>

    Hi

    Beim umwandeln in RichText lässt du ein

    $string = '<a name="asdf"><img src="anchor.png"></a>';
    $new_string = $str_replace('<img src="anchor.png">', '', $string)
    


    Das sollte klappen da es ja nur um das Ankerbild geht.

    Beim wieder einlesen des Ankers wird es schon etwas komplizierter da wir ja nicht in jeden Link dasn anchor.png einfügen dürfen.
    Hier wäre es gut wenn die Anchors immer die selbe Form haben und sich von den normalen Links unterscheiden. Dann kann man das mit einem preg_replace machen.
    $replaceString = '{tempInhalt}';
    $neuString = '<a name="asdf"></a>';
    
    preg_match_all('/<a name="(\w+)"></a>/i', $neuString, $match);
    
    $tempString = preg_replace('/(<a name="\w+"></a>)/i', '<a name=' . $replaceString . '><img src="anchor.png"></a>', $neuString);
    
    for ( $i=0; $i<count($match); $i++ ) {
      $string = str_replace($replaceString, $match[$i], 1);
    }
    


    Erklärung:
    Mit dem preg_match_all lesen wir erst die ganzen links für die Ankerpunkte aus. Danach ersetzen wir die Links mit dem Ankerbild. Nun fehlen uns natürlich die ankerlinks die wir aber durch die Schleife wieder einfügen.
    Geht bestimmt och eleganter ich weiß z.b. das es zurückreferenzierte preg_replace gibt. Mit denen könnte man das in einem Preg_replace alles abhandeln. Aber ob das dann wirklich schneller ist, wage ich zu bewzeifeln da preg_match und preg_replace doch sehr langsame, wenn auch mächtige Instrumente sind.


    Ich habs nur schnell runtergehakt da ich gleich weg muß. Aber der Ansatz sollte zumindest veranschaulichen das es funktionieren kann.

    Gruß Lamer

    • Antwort von nach 7 Tagen 1 hilfreich
      Re^2: PHP RegEx <a name='asdf'><img></a>

      Danke für deine Lösung, hat einwandfrei geklappt.

      Gruß Sebastian

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!