Autor Zpráva
Kubista
Profil
Zdravím,

mohl by mi prosím někdo poradit s regulárním výrazem. Snažím se o to, aby nedošlo k nahrazení textu, pokud bude obsahovat pouze prázdné znaky. Následující řešení funguje, ale v případě, že je tam obsažen text, který je odřádkován, tak to nefunguje. Vím, že na tečku lze použít modifikátor, který zahrnuje i "\n", ale jak to udělat v tomto případě?

Předem díky

$text    =    preg_replace('~\[b\]([^[:space:]]+)\[\/b\]~iu', '<strong>\\1</strong>', $text);
Amunak
Profil
Místo tečky použij \S, to je opak k \s, což je zástupný znak pro libovolné bílé znaky (mezery, tabulátory, carriage return, ...)

Jestli tě chápu dobře, bylo by to nějak takhle:
~\[b\](\S+)\[/b\]~iu

Mimochodem znak / není třeba escapovat.
Kubista
Profil
Amunak: ono si to právě neporadí s tímhle (kolem "b" jsem dal mezery, aby se to neformátovalo tady na fóru)

[ b ]
asd
asd
asd
[ /b ]
Tori
Profil
Kubista:
Šlo by to udělat i jiným postupem: nejdřív odstranit všechny bbcode tagy, obsahující jen bílé znaky, a pak teprv nahrazovat bbcode (už bez kontroly bílých znaků) za HTML.
Kubista
Profil
Tori:
Díky za nápad, to mi vyhovuje nejvíce.

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: