reiner_hohn: regex - preg_replace_callback

$eingabe = "[quote][quote][quote]der erste[/quote]der zweite[/quote]der dritte[/quote]";
//$eingabe = "[quote=user1][quote=user2][quote=user3]der erste[/quote]der zweite[/quote]der dritte[/quote]";

function parseTagsRecursive($eingabe){
    $regex = '#[quote]((?:[[1]|[(?!/?quote])|(?R))+)[/quote]#';
    //$regex = '#[quote=([a-z]+)]((?:[[2]|[(?!/?quote])|(?R))+)[/quote]#';
    if(is_array($eingabe){
      $eingabe = '<div>'.$eingabe[2].'</div>';
    //$eingabe = '<div '.$eingabe[1].'>'.$eingabe[2].'</div>';
      }
    return preg_replace_callback($regex, 'parseTagsRecursive', $eingabe);
    }

$ausgabe = parseTagsRecursive($eingabe);

echo "\n\n".$ausgabe."\n\n";

mit die function kann man wunderbar [quote][/quote] umwandeln. das funktionier astrein. ich will aber gerne auch [quote=user][/quote] umwandeln können, doch der regex ist mir jedoch etwas zu mächstig, da komm ich nicht mehr mit klar. kann mir da jemand helfen.

mfg


  1. ↩︎

  2. ↩︎

  1. gudn tach!

    function parseTagsRecursive($eingabe){
        $regex = '#[quote]((?:[[1]|[(?!/?quote])|(?R))+)[/quote]#';
        //$regex = '#[quote=([a-z]+)]((?:[[2]|[(?!/?quote])|(?R))+)[/quote]#';

    [a-z]+ matcht nicht auf 'user1'.

    if(is_array($eingabe){

    da fehlt ne schliessende klammer

    was du genau willst, konnte ich nicht ersehen aus deiner beschreibung. aber vielleicht hilft das:

    $regex = '#\[quote=(?:[a-z0-9]+)]((?:[^[]|\[(?!/?quote(?:=[a-z0-9]+)?])|(?R))+)\[/quote]#';
    und dann

    if(is_array($eingabe))  
      $eingabe = '<div>'.$eingabe[1].'</div>';
    

    prost
    seth


    1. ↩︎

    2. ↩︎