preg_replace - wenn $1 leer dann $3 (a-tag)

  • Guten Abend zusammen,

    wie kann ich mit mit diesem Code realisieren, dass wenn $1 leer ist, auf $3 zurückgreifen?

    PHP
                $htmlsearch = array(
                    '~<a.*title="(.*?)".*href="(.*?)".*>(.*?)</a>~s'
                );
                $htmlreplace = array(
                    '[$1]($2)'
                );
                $atag2markdown = preg_replace($htmlsearch, $htmlreplace, $text);

    Da das title-tag nicht immer mit angegeben wird, würde $1 leer sein. Dann würde ich gerne auf $3 zurückgreifen.

    Ich habe etwas davon gelesen, dass man die Ausgaben mit preg_replace_callback in variablen umwandeln und dann mittels if-else abfragen muss?! Das ist mir noch etwas zu hoch :S

  • Ich habe den Regex so angepasst, dass das title-Attribut optional ist. Zusätzlich habe ich das Suchmuster so angepasst, dass vor dem Namen des Attributs ein Whitespace stehen muss, da du sonst auch Dinge wie data-href="…" damit matched.

    Wirklich hübsch ist der Regex nicht, denn Attribute können in HTML in beliebiger Reihenfolge auftauchen.

    Alexander Ebert
    Senior Developer WoltLab® GmbH

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!