Autor | Zpráva | ||
---|---|---|---|
Fisir Profil |
#1 · Zasláno: 1. 2. 2015, 14:44:12
Potřebuju sestavit regulární výraz, který vybere řádky, které nezačínají BB tagem
[dd] nebo [dt] . Toto bych zvládal:
/^(\s*(?!\s*\[d(?:t|d)\]).*?)$/Smu [dt]Test[/dt] Text na dva řádky. s ani nahradit . za [\n.] nefunguje. Jde to vůbec?
|
||
juriad Profil |
Šel bych na to úplně jinak. Předpokládám, že tě zajímá vše kromě úseků [dt]....[/dt] a [dd]....[/dd] ať už jsou v textu kdekoli:
$text="[dt]Test[/dt] Text na dva řád[dd]ky[/dd]. [dd]Něco[/dd] Ještě něco jiného [dt]Dlouhý term[/dt]"; var_dump(preg_split('#^\[(d[dt])\].*?\[/\1\]$#ms', $text)); Pokud chceš, vyhodit jen termy a definice, které začínají na začátku řádky a končí na konci, přidej tmavě zvýzněné části. Pokud může term nebo definice být víceřádková, přidej ještě modifikátor s .
|
||
Fisir Profil |
#3 · Zasláno: 1. 2. 2015, 15:20:25
Reaguji na juriada:
Aha, moje chyba, omlouvám se. Nechci ty úseky bez [dd] nebo [dt] vybírat, ale chci je uzavřít do [dd] , tedy ten regulární výraz potřebuji použít ve funkci preg_replace . Tenhle mi sice ty řádky vybere, ale nemůžu s ním dělat nahrazení. Potřebuji tedy přesně opačný výraz.
|
||
juriad Profil |
$text="[dt]Test[/dt] Text na dva řád[dd]ky[/dd]. [dd]Něco[/dd] Ještě něco jiného [dt]Dlouhý term[/dt] Volný konec"; var_dump(preg_replace('#^(?!\[d[dt]\])(.*?)(?=\n\[d[dt]\])#sm', '[xx]\1[/xx]', $text)); Toto funguje, až na ten volný konec. To by šlo obejít přidáním nějaké značky na konec (třeba [dt][/dt]) a to po transformaci prázdné termy smazat). |
||
Fisir Profil |
#5 · Zasláno: 1. 2. 2015, 15:50:58
Reaguji na juriada:
Paráda. Díky! |
||
Časová prodleva: 10 let
|
0