Na naši technickou podporu chodí dotazy, jaké použít regulární výrazy pro vyhledání textu v elementu s kategorií (např. CATEGORYTEXT), který se nachází na určité pozici, např. za posledním svislítkem | (pokud je znak svislítko | oddělovačem úrovní kategorií). Pojďme se podívat na pár příkladů:
I. Jak najít text za posledním svislítkem:
-
nejjednodušší verze regulárního výrazu je hledat cokoliv, co není svislítko na konci řetězce:
[^\|]+$ -
příklad co se najde:
-
znak svislítko je sám o sobě regulárním výrazem pro “nebo” a pokud jej chceme hledat doslovně, jako obyčejný znak |, musíme jej v regulárním výrazu escapovat:\| -
někomu třeba může vadit mezera na začátku nalezeného textu, ale ta jde v Mergadu odstranit jednoduchým pravidlem typu Najít a nahradit, kdy se do pole Najít zadá:
^\s+, zatrhne se hledání jako regulární výraz a pole Nahradit se nechá prázdné.
-
jiné řešení, jak mezeru na začátku vyhledaného textu vůbec nemít, je rozdělit si text na části, z nichž použijeme jen tu poslední část: ukázka zde
-
Jak najít text za posledním oddělovačem úrovní kategorií, pokud tam není svislítko, ale např. ostrá závorka >?
Stačí jen v regulárním výrazu výše nahradit znak\|za>
II. Jak najít text za posledním svislítkem včetně toho svislítka:
- podobně jako výše, použijeme hledání na konci řetězce a ještě tam připíšeme oddělovač, který chceme zahrnout do výsledků hledání:
\|[^\|]+$ - příklad co se najde:
III. Jak najít text na začátku, před prvním svislítkem:
- budeme hledat od začátku řetězce jakýkoliv znak, který není svislítkem:
^[^\|]+ - příklad co se najde:
- pokud nám vadí mezera na konci nalezeného textu, odstraníme ji v Mergadu pravidlem Najít a nahradit podobně, jak bylo popsáno výše, do pole Najít zadáme:
\s+$, zatrhneme hledání jako regulární výraz a pole Nahradit necháme prázdné. - jiný způsob, jak mezeru na konci vyhledaného textu ani nemít, je rozdělit si text na části a použít jen tu první část, kterou chceme, ukázka zde
IV. Jak najít text na začátku, před prvním svislítkem včetně toho svislítka:
- podobně jako výše, použijeme hledání na začátku řetězce a ještě tam připíšeme oddělovač, který chceme zahrnout do výsledků hledání:
^[^\|]+\| - příklad co se najde:
V. Jak najít text uprostřed, mezi prvním a druhým svislítkem?
- třeba tak, že si rozdělíme text na části a použijeme tu prostřední část, ukázka zde, regulární výraz vypadá složitěji, ale je jen složený z více částí:
^(.*)\|\s*(.*?)\s*\|(.*)$ - příklad co se najde:
Napadá vás ještě nějaká varianta, kterou chcete vyhledat? Napište ji v komentáři pod tímto příspěvkem.
Související témata na našem fóru:






