BBcode wywołujący funkcje php

0

Witam, chciałem napisać prostą funkcję bbcode, zawierającą podstawowe znaczniki i jeden dodatkowy wywołujący inną funkcję, jej kod:

function bbcode($text){
    
    //$text = preg_replace('\[form](.*?)\[/form]', ''.showForm('1').'', $text);
  $patterns = array
  (
    '|\[b\](.*?)\[/b\]|i',
    '|\[i\](.*?)\[/i\]|i',
    '|\[u\](.*?)\[/u\]|i',
    '|\[color=([a-z]+)\](.*?)\[/color\]|i',
    '|\[size=([0-9]+)\](.*?)\[/size\]|i',
    '|\[url=(http://)?(.+?)\](.*?)\[/url\]|i',
    '|\[form\]([0-9])\[/form\]|i'
 
 );
  $replacements = array
  (
    '<span style="font-weight: bold;">\1</span>',
    '<span style="font-style: italic;">\1</span>',
    '<span style="text-decoration: underline;">\1</span>',
    '<span style="color: \1;">\2</span>',
    '<span style="font-size: \1px;">\2</span>',
    '<a href="http://\2">\3</a>',
    showForm('\1')

 );
  $text = str_replace("\n", '<br>', trim($text));
  $text = preg_replace($patterns, $replacements, $text);
  return $text;
}

Przy użyciu znacznika [form]2[/form] (2 pomiędzy znacznikami form to parametr $id funkcji showForm), funkcja showForm nie działa poprawnie, ponieważ $id wynosi \1, a powinno być 2.
Nie wiem jak rozwiązać ten problem, może ma ktoś jakąś propozycję?

0

Już znalazłem rozwiązanie. Gdyby ktoś miał podobny problem, poniżej zamieszczam działający kod.

$text = "[form]2[/form]";

function bbform($text)
{

    $form = '#\[form]((?:[^[]|\[(?!/?form])|(?R))+)\[/form]#';

    if (is_array($text)) {
        $text = showForm($text[1]);
    }

    return preg_replace_callback($form, 'bbform', $text);
}

$formularz = bbform($text);

echo $formularz;

1 użytkowników online, w tym zalogowanych: 0, gości: 1