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: