Problem mit Preg_replace

ThiKool

Erfahrenes Mitglied
Hallo Leute,

ich bin am verzweifeln...
Und zwar versuche ich schon fast zwei Stunden den RegEx zum laufen zu bringen.

ich möchte in <a href abprüfen ob http oder https enthalten ist und es, wenn es nicht enthalten ist hinzufügen.

Folgendes habe ich bis jetzt probiert, leider ohne Erfolg
Code:
$text = preg_replace("/(<a href=\")([\^http]\+\".*)/Usi", "\\1http://\\2", $text);

Ich hoffe ihr könnt mir helfen :)
 
Zuletzt bearbeitet:
Das Ganze anders angehen wäre vllt. nicht schlecht.
HTML per Regex verarbeiten ist und bleibt nämlich unmöglich;
irgendwelche Fälle (Links in deinem Fall) gibts immer, die abhängig vom Ausdruck nicht richtig verarbeitet werden können. Siehe http://php.net/manual/en/book.dom.php für was Sinnvolleres.

Und zum Inneren von href selber: Auch das geht ganz einfach ohne Regex.
Leerzeichen am Anfang mit rtrim entfernen und dann mit substr prüfen, ob http da ist.
Wenn nicht, einfache Stringverkettung.
 
Vielleicht noch kurz als Erklärung warum es nicht möglich ist mit Regex:
Reguläre Ausdrücke sind in der theoretischen Informatik für reguläre Grammatiken. Bei HTML kannst du schon einfachste Regeln aufstellen, die kein Regex parsen kann (bsp: Elemente können beliebig weit ineinander verschachtelt werden, also theoretisch unendlich viele divs ineinander). Dies weil HTML schon mindestens eine kontextfreie Grammatik ist. Im obigen Beispiel mit den endlos ineinander geschachtelten divs:
S -> A
A ->
A -> <div>A</div>

oder vielleicht bisschen interessanter: Beliebige lange Folge von div und span in beliebiger Kombination:
S -> A
A -> <div>A</div>
A -> <span>A</span>
A ->

Wobei S das Startsymbol ist und die leeren Regeln ( X -> ) für einen Endzustand stehen sowie Kleinbuchstaben und Sonderzeichen (ausser natürlich ->) für Terminale. Das ist eine kontextfreie Grammatik für unendlich lange ineinander geschachtelte divs. Kontextfrei daher weil keine Terminalsymbole und jeweils nur ein Nichtterminalsymbol auf der linken Seite stehen.

Weitere (sehr interessante) Informationen:
http://de.wikipedia.org/wiki/Kontextfreie_Grammatik
http://de.wikipedia.org/wiki/Reguläre_Grammatik
http://de.wikipedia.org/wiki/Pumping-Lemma (man überlege sich, ob das "unendliche-divs" Beispiel das Pumping Lemma erfüllt)
http://de.wikipedia.org/wiki/Chomsky-Hierarchie
usw
 

Neue Beiträge

Zurück