jakob2002: Reguläre Ausdrücke

Hallo,

ich möchte in einem String alle Links ersetzen, die keine target angaben oder weitere angaben haben. also alle die so aussehen:

<a href="{hier kann alles stehen}">

und nicht solche die etwa so aussehen:

<a href="{hier kann alles stehen}" target="_blank">

weiß jemand wie ich das machen kann?

ich habe es schon so versucht:

preg_replace("!<a href="(.*)">!i","{ersetzen}",$str);

und so auch:

preg_replace("!<a href="(.*?)">!i","{ersetzen}",$str);

allerdings werden dann auch die links, die eine target angabe enthalten ersetzt. aber nicht richtig, sondern total komisch.

naja, ich hoffe mir kann jemand helfen und ich bedanke mich auch schon im voraus für die antworten.

  1. Hi,

    preg_replace("!<a href="(.*)">!i","{ersetzen}",$str);

    Da dürfte Dir klar sein warum: nach dem '<a href="' wird bis zum letzten '">' der Zeile gesucht und alles dazwischen gematcht.

    preg_replace("!<a href="(.*?)">!i","{ersetzen}",$str);

    Das Fragezeichen sorgt nur dafür, daß die kürzeste Möglichkeit gefunden wird.
    Bei '<a href="bla" target="bla">' ist aber 'bla" target="bla' die kürzeste Möglichkeit.
    Es würde genausoviel matchen, wenn da '<a href="bla" target="bla"><img src="blubb" alt="">' stünde.

    preg_replace("!<a href="[^"]*">!i","{ersetzen}",$str);
    Nach dem '<a href="' beliebig viele Zeichen außer einem ", gefolgt von ">

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
    1. preg_replace("!<a href="[^"]*">!i","{ersetzen}",$str);

      Ahh danke, ersetzen tut er. aber wenn ich versuche mit preg_match_all danach zu suchen, dann findet er komischerweise nichts. muss ich des bei preg_match_all irgendwie anders machen?

      1. SChrieb mal code oder melde dich über Icq 159894030
        gruß
        Hanno