Autor Zpráva
Honza.P@
Profil
Mám funkci, která mi nahrazuje určité části pomocí jiných (funguje to nějak jako bbcode)

$clanek = "Neco nekde [nk]Petr[/nk] bude."
$text[0] = "/\[nk\](.*?)\[\/nk\]/is";
$nahrad[0] = self::getEmail("$1");

return preg_replace($text, $nahrad, $clanek);


Problém je v tom, že $1 se funkci self::getEmail("$1") předá jen jako text $1 a né jeho obsah, tedy Petr.

Nevíte, jak toto vyřešit? Děkuji :)
Radek9
Profil
Honza.P@:
A nemá to být spíš nějak takto?
$clanek = "Neco nekde [nk]Petr[/nk] bude."
$text[0] = "/\[nk\](.*?)\[\/nk\]/is";
$nahrad[0] = "$1";
 
return self::getEmail(preg_replace($text, $nahrad, $clanek));
Tedy předávat metodě getEmail až výsledek nahrazení.
Honza.P@
Profil
Radek9:
Nn, protože těch nahrazení může být víc ($text i $nahrad josu array());

Pokud přidám:
$text[1] = [el]neco@neco.cz[/el]
$nahrad[1] = self::getNick("$1");
tak už by to nešlo.
Radek9
Profil
Honza.P@:
No, to sice jo, ale tak si holt musíš udělat nějaký třetí pole, kam se bude ukládat třeba název metody a pak to switchem rozdělíš. Tohle z logickýho hlediska nemůže fungovat, protože tý metodě odpravdu předáváš "$1".

Edit: Teď mě napadá, pokud přidáš flag e, tak by to mohlo jít takhle:
$text[0] = "/\[nk\](.*?)\[\/nk\]/ise";
$nahrad[0] = "self::getEmail('$1')";
Honza.P@
Profil
[#4] Radek9: Díky moc. Funguje to :)
Mohl bych tě poprosit, zda by si neměl odkaz, kde jsou ty "flagy" vysvětlené? Např to e vůbec neznám.

Díky :)
Radek9
Profil
Honza.P@:
Jmenuje se to vlastně modifiers (nevím, jestli je flag špatně, ale já to používám). Zrovna to e značí povolení evalu, tedy, že všechen kód v tom stringu se provede. Můžeš se o nich dočíst tady.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: