Bodky, otázniky aj zátvorky a ich použitie v regulárnych výrazoch už poznáte z predchádzajúcich dielov seriálu (ak nie, nájdete ich tu: 1. diel2. diel). Teraz prišiel čas na predstavenie a vysvetlenie ich praktického použitia, ktoré vám v Mergadu veľa uľahčia prácu.

Na úvod ešte trochu teórie, ktorá sa do minulých dielov nezmestila. V regulárnych výrazoch je možné pracovať aj s negáciou, a to pomocou striešky na začiatku množiny znakov. Napríklad:

  • [^\d] zodpovedá jednému znaku, ktorý nie je číslica,
  • [^\s] zodpovedá jednému znaku, ktorý nie je medzera (nejde o biely znak).

Regulárny výraz [^\s]*$ tak bude hľadať akékoľvek znaky od konca reťazca po prvú medzeru (biely znak). Takto je možné nájsť napr. Posledné slovo alebo číslo v reťazci (pozri príklad, ku ktorému sme využili túto stránku).

EAN

EAN môže mnohokrát spôsobovať problémy pri zobrazovaní produktov vo vašom feede. Pozrieme sa teda na dva časté problémy s jeho využitím.

1. Hromadné odstránenie EAN kódov z popisku produktov

Pre odstránenie EANu z DESCRIPTION alebo napríklad CATEGORYTEXTU jednotlivých produktov potrebujeme využiť pravidlo s regulárnym výrazom, ktoré vyhľadá číselný reťazec s dĺžkou 8 – 13 znakov vrátane medzery za ním, a nahradí ho za “nič”. Využijeme teda pravidlo typu nájsť a nahradiť, pričom v elemente CATEGORYTEXT budeme vyhľadávať nasledujúce regulárny výraz: \d{8,13}\s, a do poľa pre nahradenie nezadáme nič.
 
Toto pravidlo môžeme aplikovať na všetky produkty, nie je potreba robiť špeciálny výber — tam kde sa EAN v popisku produktu nenájde sa nič nestane a pravidlo sa neaplikuje.

2. Kontrola EANu

Chybná dĺžka EANu môže byť tiež častým zdrojom problémov napríklad pri exporte dát do Google Merchant. Pomocou regulárnych výrazov v Mergadu takú chybu ľahko odladíte.

Povedzme, že chcete vyhľadať všetky produkty, ktoré majú EAN zle — obsahujú iný počet znakov ako 8 alebo 12 – 14 (čo sú najčastejšie dĺžky EANu). Budeme teda vyhľadávať také produkty, ktoré v elemente EAN nemajú práve 8 alebo práve 12 – 14 znakov. Tu využijeme striešku z úvodu, prípadne v jednoduchom rozhraní Mergada príkaz “neobsahuje regulárny výraz”: ^(\ d{8}|\d{12,14})$

  • Strieška a dolár označujú začiatok a koniec reťazca, v ktorom vyhľadávame (oproti predchádzajúcemu príkladu tentoraz EAN neobklopuje ďalší text).
  • \d vyhľadáva číslice — buď presne 8 ľubovoľných číslic (osmička v zloženej zátvorke) alebo (zvislou čiarou) presne 12 — 14 ľubovoľných číslic.

Odstránenie veľkosti z PRODUCTNAME

Niektoré porovnávače — napríklad Glami — požadujú, aby element PRODUCTNAME neobsahoval informáciu o veľkosti produktu, pretože pre ňu má špeciálny element PARAM. V prípade, že máte svoje produkty v e‑shope takto pomenované, potrebujete časť názvu zmazať u veľkého množstva položiek. Ako na to?

Pomocou pravidlá nájsť a nahradiť budeme hľadať konkrétne regulárny výraz: veľkosť\s*[\ dSMLX]+ a nahrádzať za “nič”.
 
Chceme totiž nájsť slovné spojenie veľkosti a písmená alebo čísla, ktoré danú veľkosť označuje, pričom medzi slovom “veľkosť” a hodnotou môže byť ľubovoľný počet medzier.

Poďme ale postupne a ukážme si, ako takýto zápis vytvoriť:

  1. veľkosť — hľadáme reťazec, v ktorom je slovo “veľkosť”,
  2. hodnota veľkosti — vieme, že hodnoty označujeme písmenom (S, M, L, …) a občas tiež kombináciou písmená a čísla (napr. 4XL). Preto použijeme zápis \d, ktorý vyhľadáva všetky čísla od 0 do 9, a následne vymenujeme všetky písmená, z ktorých aspoň jedno sa vo výraze nachádza (preto hranaté zátvorky),
  3. toto označenie môže byť kdekoľvek v reťazci, nepoužijeme teda značky pre začiatok alebo koniec reťazca,
  4. medzi slovom “veľkosť” a samotnou hodnotou môže byť medzera (alebo viac medzier) a alebo tiež nemusí (napr. veľkostXL, veľkosť XL), preto použijeme vyhľadávanie medzier pomocou výrazu \s, hviezdička potom hovorí, že sa tam má medzera vyskytovať 0 až nespočetnekrát,
  5. znamienko plus na konci reťazca určuje, že sa celý hľadaný výraz v hranatých zátvorkách vyskytuje v našom reťazci aspoň raz.

Snáď ste sa v záplave zátvoriek a striešok nestratili. Ak áno, neváhajte sa nám ozvať na fórum alebo e‑mail, radi vám pomôžeme sa nájsť!

Daniel Czetner

Daniela ste poznali zo slovenskej podpory Mergada. Pomáhal riešiť problémy, písal návody v nápovede a testoval nové funkcie v Mergade. Mal jednoznačne najdlhšie dredy v tíme a jeho drsnému humoru sa vyrovnal snáď len jeho spolupracovník Přemek.