Odstranění závorek z textu

Školení, která pořádám

Když z textu chceme odstranit všechno, co je v závorkách, můžeme použít jednoduchý regulární výraz \([^)]*\). Pokud však do sebe závorky mohou být vnořené, je situace složitější a musíme sáhnout k rekurzivním regulárním výrazům, konkrétně k \(((?>[^()]+)|(?R))*\). (?R) rekurzivně vkládá celý regulární výraz, do seznamu přeskakovaných znaků přibyla otevírací závorka (protože tu chceme ošetřit rekurzí) a v nerekurzivní větvi je použit výraz (?>, který zajistí, že v případě neúspěchu se nebude zkoušet použít rekurze na všech možných místech.

S čím uvedený výraz nepočítá, jsou smajlíky ;-).

Jakub Vrána, Řešení problému, 11.5.2007, diskuse: 5 (nové: 0)

Diskuse

vfb:

pokud mohu o něco poprosit, tak nebylo by "ošetření" textu před vložením do databáze na záměnu špatných uvozovek typografickými a na přidání nezalomitelné mezery za jednopísmenou předložku?

FOUS:

SKoBA je jednoduchý program, který se snaží odstraňovat z HTML souborů nejběžnější typografické chyby. Jeho činnost spočívá ve vkládání mezer se zakázaným zlomem řádku na vhodná místa a nahrazování některých pomlček spojovníky. Aktuální verzi hledejte na adrese http://www.kii.vslib.cz/~satrapa/sw/skoba/.

FOUS:

Pan Satrapa to má v Perlu - ze zdrojáků už si potřebné regulární výrazy vytáhnete :)

ikona Jakub Vrána OpenID:

Pokud to jde, doporučil bych použít Texy.

pletule:

moc sem to nepochopilA A KDYŽ SEM SI TO PŘEČETLA TAK TO ŠLO JAK PO MÁSLE....

Vložit komentář

Používejte diakritiku. Vstup se chápe jako čistý text, ale URL budou převedeny na odkazy a PHP kód uzavřený do <?php ?> bude zvýrazněn. Pokud máte dotaz, který nesouvisí s článkem, zkuste raději diskusi o PHP, zde se odpovědi pravděpodobně nedočkáte.

Jméno: URL:

avatar © 2005-2018 Jakub Vrána. Publikované texty můžete přetiskovat pouze se svolením autora. Ukázky kódu smíte používat s uvedením autora a URL tohoto webu bez dalších omezení Creative Commons. Můžeme si tykat. Skripty předpokládají nastavení: magic_quotes_gpc=Off, magic_quotes_runtime=Off, error_reporting=E_ALL & ~E_NOTICE a očekávají předchozí zavolání mysql_set_charset. Skripty by měly být funkční v PHP >= 4.3 a PHP >= 5.0.