| 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: 11 let
|
|||
0