Regex Hilfe für video bbcode

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Regex Hilfe für video bbcode

    Hallo Zusammen,
    ich scheiter an einem Regex und würde mich sehr über Hilfe freuen, da ein Freund hier was braucht und ich am Regex verzweifele.

    Ich möchte eine html-Tag section, die ich zerlegen muss, da ich die Einzelteile in einem Shortcode verwende.
    Ausgangspunkt kann wie folgt sein:

    Quellcode

    1. <video src="http://20101121-131236.mov" controls="controls" width="480" height="360" img-url="http://imagelink">Your browser does not support the video tag</video>


    Ziel ist bspw. so was:

    Quellcode

    1. [video filmurl='http://20101121-131236.mov' posterurl='http://imagelink']

    oder

    Quellcode

    1. [video filmurl='http://20101121-131236.mov']


    Der Tag kann mit src und img-url sein, es kann aber auch jeder einzeln sein. Mich interessieren immer src und/oder img-url.
    Aktuell habe ich folgende Lösung, die aber nur greift, wenn beide Attribute im Tag sind.

    Quellcode

    1. $data['post_content'] = stripslashes( $data['post_content'] );
    2. $data['post_content'] = preg_replace(
    3. "~<video\s+ # <video plus Leerraum
    4. src=([\"|\'])([^\\1]*)\\1 # Attribut src
    5. \s+.*\s+ # Zeug dazwischen
    6. img-url=([\"|\'])([^\\3]*)\\3.*> # Attribut img-url
    7. .*</video> # Rest
    8. ~msiUx"
    9. // Modifier:
    10. // m = Multiline
    11. // s = '.' erfaßt auch Umbrüche
    12. // i = Groß- Kleinschreibung egal, also auch <ViDeO
    13. // U = ungreedy, fang nur das Nötigste
    14. // x = Ignoriere Leeraum im Muster, für die erklärenden Kommentare
    15. ,
    16. "[video filmurl='\\2' posterurl='\\4']",
    17. $data['post_content']
    18. );
    19. $data['post_content'] = addslashes( $data['post_content'] );
    Alles anzeigen


    Vielen Dank schon jetzt für die Mühe.
  • In einer einzigen Regex ist das nicht zu machen. Mit folgenden 4 Zeilen Code würde es klappen:

    Quellcode

    1. $ausgangswert = '<video src="http://20101121-131236.mov" controls="controls" width="480" height="360" img-url="http://imagelink">Your browser does not support the video tag</video>';
    2. $filmurl = preg_replace('/^.*src="?([^\s"]+)"?.*$/ims','$1',$ausgangswert);
    3. $posterurl = preg_replace('/^.*img-url="?([^\s"]+)"?.*$/ims','$1',$ausgangswert);
    4. $endwert = '[video'.($filmurl != '' && $filmurl != $ausgangswert ? " filmurl='".$filmurl."'" : '').($posterurl != '' && $posterurl != $ausgangswert ? " posterurl='".$posterurl."'" : '').']';
  • Folgende Regex kommt dann auch mit einfachen Anführungszeichen um die Attribute herum aus:

    Quellcode

    1. $ausgangswert = '<video src=\'http://20101121-131236.mov\' controls="controls" width="480" height="360" img-url=\'http://imagelink\'>Your browser does not support the video tag</video>';
    2. $filmurl = preg_replace('/^.*src=["\']?([^\s"\']+)["\']?.*$/ims','$1',$ausgangswert);
    3. $posterurl = preg_replace('/^.*img-url=["\']?([^\s"\']+)["\']?.*$/ims','$1',$ausgangswert);
    4. $umgewandelt = '[video'.($filmurl != '' && $filmurl != $ausgangswert ? " filmurl='".$filmurl."'" : '').($posterurl != '' && $posterurl != $ausgangswert ? " posterurl='".$posterurl."'" : '').']';