Seriál článkov o regulárnych výrazoch sa pomaly blíži do finále a preto by som vám chcel v dnešnom diely zhrnul niektoré dôležité poznatky a pridal pár skutočných regulárnych fines, ktoré určite v práci s Mergadom oceníte.

*/

Ak si chcete osviežiť doterajšie vedomosti o regulároch alebo vám niektorý z predchádzajúcich dielov unikol, mrknite sa na jednotlivé články — 1. diel, 2. diel, 3. diel.

Užitočné značky pre regulárne výrazy

Pri predstavovaní jednotlivých značiek som vynechal ešte dve dôležité a šikovné — \D a \S. Teraz to napravím: 

  • \D funguje ako negácia malého \d , teda vyhľadá všetky znaky, ktoré nie sú číslom a je teda ekvivalentná výrazu, ktorý som predstavil minule — [^\d]
  • \S potom vyhľadáva také znaky, ktoré nepatria medzi biele, teda nejde o medzery, tabulátory, nové riadky a pod., taktiež je ekvivalentná výrazu z minula — [^\s]

Pre prehľadnosť ešte pridávam tabuľku všetkých značiek, ktoré v príkladoch používam. 

REGULÁRNÍY VÝRAZ VYHĽADÁ
. bodka  práve jeden neznámý znak
* hviezdička  konkrétny znak 0 až nekonečne krát
? otáznik  konkrétny znak 0 alebo 1 krát (znak se nevyskytuje alebo vyskytuje len raz)
+ plus konkrétny znak 1 až nekonečne krát (znak sa vyskytuje aspoň raz)
[] hranaté zátvorky jeden zo skupiny hľadaných znakov
{} zložené zátvorky x opakovaní znaku alebo skupiny znakov pred zátvorkou
^ strieška od začiatku reťazca
$ dolár od konca reťazca
| vertikála jeden ALEBO druhý znak (slovensky alebo)
\s medzeru a ďalšie biele znaky (tabulátory, nové riadky)
\d  zastupuje čísla od 0 do 9
\S alebo  [^\s] čokoľvek okrem bielych znakov, teda čísla a písmená (negácia \s)
\D alebo  [^\d] čokoľvek okrem položiek, teda biele znaky a písmená (negácia \d)

Zložitejšie príklady

A teraz tie avizované zložitejšie príklady. Na niektoré ste sa nás pýtali na fóre, o iných si myslím, že ich regulárne výrazy riešia elegantne.

Častým nedostatkom feedov sú chýbajúce alebo zle naplnené elementy. Podobne často sa požadovaná informácia vyskytuje na inom mieste vo vašom kóde a je teda logickým riešením ju odtiaľ prepísať do správneho elementu. Najprv je nutné skontrolovať, že takýto element náš feed obsahuje a ak nie, tak ho na karte Pravidlá doplniť. Zároveň predpokladajme, že sa tento problém týka viac ako dvoch desiatok produktov (inak by bolo ľahšie riešiť ho ručne). Chceme preto zautomatizovať prepisovanie tak, aby Mergado poznalo, kde má informáciu vziať. Pozrime sa na to pomocou príkladu: 

  1. Naším zámerom je naplniť element MANUFACTURER informáciami o výrobcovi, ktorá sa nachádza na začiatku PRODUCTNAME.
  2. V prvom kroku tak vytvoríme premennú s názvom MANUFACTURER, ktorej náplňou bude prvé slovo z elementu PRODUCTNAME. (Novú premennú pridáte na karte Pravidlá v pravom stĺpci skrze príkaz Upraviť premenné).
  3. To zariadime pomocou regulárneho výrazu: ^\S+ Tento regulárny výraz hľadá od začiatku reťazca akékoľvek znaky do prvej medzery, nájde teda prvé slovo v reťazci, a je preto použiteľný pre jednoslovné názvy výrobcov, napr. Addidas, Nike, Reebok, atď.
  4. Túto premennú potom vložíme pomocou pravidla Prepísať do elementu MANUFACTURER.

Obdobne môžeme postupovať aj u vyhľadávania na inom mieste v konkrétnom elemente:

  • prvé slovo v texte ^\S+
  • prvé dve slová od začiatku textu ^(\s*\S+){2}
  • posledné slovo na konci textu, vrátane prípadnej interpunkcie na konci \S+$
  • posledné dve slová na konci textu, vrátane prípadnej interpunkcie na konci (\S+\s*){2}$

Duplicitné slová v elemente

Ak chceme nájsť duplicitné slová v jednom elemente, môžeme taktiež využiť regulárne výrazy. Poslúži nám pre spätnú kontrolu dát, a pravidiel, ktoré sme pre ich správu nastavili. Napríklad chceme vyhľadať duplicity v PRODUCTNAME, môžeme takéto produkty vyhľadať pomocou regulárneho výrazu: (\S+)(.*)\1 Zjednodušene týmto príkazom Mergadu hovoríme: nájdi reťazec znakov (napr. slovo), za ktorým je ľubovoľný text a následne sa takáto skupina znakov (teda napr. to slovo) znovu opakuje. Výraz neberie ohľad na interpunkciu, nájde teda výrazy, za ktorými je čiarka aj bodka a zároveň aj výrazy bez týchto znamienok. Dôležité je spomenúť, že ide o zjednodušený príklad a taký regulárny výraz nebude vyhovovať všetkým kombináciám, ktoré môžu v texte nastať. Pre naše účely použitia v Mergadu však myslím postačí. V prípade, že duplicity skutočne nájdete, oplatí sa pozrieť do pravidiel, akým spôsobom sa nám tam dostali (mohli to spôsobiť napríklad opakujúce sa pravidlá). Ak máte ďalšie otázky k regulárnym výrazom alebo Mergadu všeobecne, ozvite sa nám do komentárov, do fóra alebo priamo na podporu.

Luděk Volejník

Senior konzultant Mergada Luďek pôsobil v oblasti e‑commerce vyše 15 rokov. Ostrieľaný support master a lektor vás viedol zákutiami Mergada aj svetom regulárnych výrazov. Na svojom konte má stovky vyškolených užívateľov Mergada, ktorí sa stali uznávanými odborníkmi na feed marketing, PPC a SEO.