regex - preg_replace_callback
reiner_hohn
- php
$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
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