regularni vyrazy 4. díl, logo

Seriál článků o regulárních výrazech se pomalu blíží do finále a proto bych vám rád v dnešním díle shrnul některé důležité poznatky a přidal pár skutečných regulárních fines, které jistě v práci s Mergadem oceníte. 

Pokud si chcete osvěžit dosavadní znalosti o regulárech nebo vám některý z předchozích dílů unikl, mrkněte se na jednotlivé články – 1. díl, 2. díl, 3. díl

Užitečné značky pro regulární výrazy

Při představování jednotlivých značek jsem vynechal ještě dvě důležité a šikovné — \D  a \S. Teď to napravím: 

  • \D funguje jako negace malého \d, tedy vyhledá všechny znaky, které nejsou číslem a je tedy ekvivalentní výrazu, který jsem představil minule — [^\d]
  • \S potom vyhledává takové znaky, které nepatří mezi bílé, tedy nejde o mezery, tabulátory, nové řádky apod., taktéž je ekvivalentní výrazu z minula — [^\s] 

 Pro přehlednost ještě přidávám tabulku všech značek, které v příkladech používám. 

REGULÁRNÍ VÝRAZ VYHLEDÁ
. tečka  právě jeden neznámý znak
* hvězdička  konkrétní znak 0 až nekonečně krát
? otazník  konkrétní znak 0 nebo 1 krát (znak se nevyskytuje nebo vyskytuje jen jednou)
+ plus  konkrétní znak 1 až nekonečně krát (znak se vyskytuje alespoň jednou)
[] hranaté závorky  jeden ze skupiny hledaných znaků
{} složené závorky  x opakování znaku nebo skupiny znaků před závorkou
^ stříška  od začátku řetězce
$ dolar  od konce řetězce
| svislítko  jeden NEBO druhý znak (česky nebo)
\s  mezeru a další bílé znaky (tabulátory, nové řádky)
\d  zastupuje čísla od 0 do 9
\S nebo [^\s]  cokoli kromě bílých znaků, tedy čísla a písmena (negace \s)
\D nebo [^\d]  cokoli kromě čísel, tedy bílé znaky a písmena (negace \d)

 

Složitější příklady

A teď ty avizované složitější příklady. Na některé jste se nás ptali na fóru, o jiných si myslím, že je regulární výrazy elegantně řeší. 

Přepsání informace z jednoho elementu do druhého

Častým nedostatkem feedů jsou chybějící nebo špatně naplněné elementy. Podobně často se požadovaná informace vyskytuje na jiném místě ve vašem kódu a je tedy logickým řešením ji odtamtud přepsat do správného elementu.  Nejprve je nutné zkontrolovat, že takový element náš feed obsahuje a pokud ne, tak ho na stránce Elementy doplnit. Zároveň předpokládejme, že se tento problém týká více než dvou desítek produktů (jinak by bylo snazší řešit jej ručně).  Chceme proto zautomatizovat přepisování tak, aby Mergado poznalo, kde má informaci vzít. Podívejme se na to pomocí příkladu: 

  1. Naším záměrem je naplnit element MANUFACTURER informacemi o výrobci, která se nachází na začátku PRODUCTNAME. 
  2. V prvním kroku tak vytvoříme proměnnou s názvem MANUFACTURER, jejíž náplní bude první slovo z elementu PRODUCTNAME. (Novou proměnnou přidáte na stránce Proměnné v levém menu skrze příkaz Upravit proměnné).
  3. To zařídíme skrze regulární výraz:  ^\S+ Tento regulární výraz hledá od začátku řetězce jakékoliv znaky do první mezery, najde tedy první slovo v řetězci, a je proto použitelný pro jednoslovné názvy výrobců, např. Addidas, Nike, Reebok, atd.
  4. Tuto proměnnou potom vložíme pomocí pravidla Přepsat do elementu MANUFACTURER.

Obdobně můžeme postupovat i u vyhledávání na jiném místě v konkrétním elementu: 

  • první slovo v textu ^\S+
  • první dvě slova od začátku textu ^(\s*\S+){2}
  • poslední slovo na konci textu, včetně případné interpunkce na konci \S+$
  • poslední dvě slova na konci textu, včetně případné interpunkce na konci (\S+\s*){2}$
     

Duplicitní slova v elementu

Chceme-li najít duplicitní slova v jednom elementu, můžeme také využít regulární výrazy. Poslouží nám pro zpětnou kontrolu dat, a pravidel, která jsme pro jejich správu nastavili.   Například chceme vyhledat duplicity v PRODUCTNAME, můžeme takové produkty vyhledat pomocí regulárního výrazu:  (\S+)(.*)\1 Zjednodušeně tímto příklazem Mergadu říkáme: najdi řetězec znaků (např. slovo), za kterým je libovolný text a následně se taková skupina znaků (tedy např. to slovo) znovu opakuje. Výraz nebere ohled na interpunkci, najde tedy výrazy, za kterými je čárka i tečka a zároveň i výrazy bez těchto znamének. Důležité je zmínit, že jde o zjednodušený příklad a takový regulární výraz nebude vyhovovat všem kombinacím, které mohou v textu nastat. Pro naše účely použití v Mergadu však myslím postačí.   V případě, že duplicity skutečně najdete, vyplatí se podívat do pravidel, jakým způsobem se nám tam dostaly (mohla to způsobit například opakující se pravidla). Pokud máte jakékoli další dotazy k regulárním výrazům nebo Mergadu obecně, ozvěte se nám do komentářů, do fóra nebo přímo na podpor 

Sledujte i další díl Jak na regulární výrazy v Mergadu nebo závěr seriálu o regulárních výrazech.

  

Luděk Volejník

Senior konzultant Mergada Luďek působil v oblasti e‑commerce přes 15 let. Ostřílený support master a lektor vás prováděl zákoutími Mergada i světem regulárních výrazů. Na svém kontě má stovky vyškolených uživatelů Mergada, kteří se stali uznávanými odborníky na feed marketing, PPC a SEO.