Slovník | Vyhledávání | Mapa webu
 
Základy informatiky pro biologyDatabázové systémy v biomedicíně Vyhledávání v textu Regulární výrazy Základy regulárních výrazů

Logo Matematická biologie

Základy regulárních výrazů

Na regulární výraz se můžeme dívat jako na rozšíření operátoru LIKE. Jde o textovou šablonu, která se skládá z:

  • hledaných znaků
  • zástupných znaků
  • kvantifikátorů
  • operátorů
  • modifikátorů

Zatímco operátor LIKE má pouze 2 zástupné znaky, u regulárních výrazů je nabídka širší. Zástupným znakem můžeme odlišit např. číslici od písmena nebo tzv. bílého znaku (mezera, tabulátor). Přehled základních zástupných znaků uvádí Tabulka 12.

Tabulka 12: Zástupné znaky v regulárních výrazech

Pokud potřebujeme v textu hledat samotný zástupný znak v původním významu, tedy například tečku, musíme před hledaný znak umístit zpětné lomítko. Toto pravidlo platí pro všechny speciální znaky regulárních výrazů.

Uvedeným výrazem hledáme tříznakové řetězce, které začínají "^." a libovolným následujícím znakem.  

  Zástupný znak zastupuje vždy právě jeden znak v prohledávaném řetězci. Toto chování můžeme změnit pomocí tzv. kvantifikátorů, které v regulárním výrazu umístíme těsně za daný zástupný znak. Přehled kvantifikátorů je uveden v Tabulce 13.

Tabulka 13: Kvantifikátory v regulárních výrazech

Kvantifikátor

Význam

*

0 – n opakování ("greedy" chování)

*?

0 – n opakování ("nongreedy" chování)

+

1 – n opakování ("greedy" chování)

+?

1 – n opakování ("nongreedy" chování)

?

0 nebo 1 opakování

{m}

Přesně m opakování

{m,}

m nebo více opakování

{m,n}

Minimálně m, maximálně n opakování

Spojením zástupného znaku "." a kvantifikátoru " * " dostáváme regulární výraz, který pokrývá libovolný textový řetezec. Tuto kombinaci používáme ve dvou variantách:

  • "hladová" (greedy)
  • "nehladová" (nongreedy)

Pokud použijeme hladovou variantu, bude se hledat shoda s co nejdelším řetězcem, naopak nehladová varianta hledá shodu s co nejkratším řetězcem. Blíže se na tento problém podíváme v další části kapitoly věnované nahrazování podřetězců s použitím regulárních výrazů.

Pokud bychom hledali v textu datum, mohli bychom použít tento regulární výraz:

Hledáme jednu až dvě číslice jako den, následuje tečka, jedna až dvě číslice na pozici měsíce, tečka a dvě až čtyři číslice na pozici roku. Pokud by komponenty datumu oddělovaly kromě tečky i mezery, rozšířili bychom výraz o mezeru s otazníkem za každou tečku:

Ani tento výraz však není stále ideální, protože den i měsíc může ve skutečnosti na první pozici obsahovat jen vybrané číslice, konkrétně den 0, 1, 2 nebo 3, měsíc pouze 0 nebo 1. Tento problém nám pomohou řešit tzv. operátory regulárních výrazů. Jejich přehled je uveden v tabulce 14.

Tabulka 14: Operátory regulárních výrazů

Operátor

Význam

|

nebo

[abc]

Jeden z uvedených znaků (a nebo b nebo c)

[^abc]

Libovolný znak kromě uvedených (vše kromě a b c)

(abc)

Uzavření skupiny znaků - blok

1, 2, 3, ...

Odkaz na první, druhý, třetí blok

    Pro specifikaci vybraných znaků můžeme využít buď operátor svislítko "|" nebo operátor hranatých zvorek. Upravený výraz pro hledání datumu může vypadat takto:

V tomto případě jsou obě varianty rovnocenné, rozdíl by byl, pokud bychom kombinovali operátor se zástupným znakem. Zatímco operátor svislítko zástupné znaky interpretuje, operátor hranatých závorek nikoliv. Výraz hledající v textu číslici nebo bílý znak proto musí vypadat takto:

Pomocí kulatých závorek můžeme vybranou skupinu znaků uzavřít do bloku a na ten se pak následně odkazovat pomocí zpětného lomítka a čísla pořadí bloku. Tuto techniku použijeme, pokud hledáme například repetitivní vzor a chceme ho definovat co nejobecněji. Například pokud hledáme opakování tří stejných číslic, můžeme napsat:

Říkáme tím, že chceme najít číslici , za kterou se má opakovat stejný znak . Výraz je podstatně kratší než rovnocenný výraz s použitím operátoru svislítka a výpisem všech variant:

'(111|222|333|444|555|666|777|888|999|000)'

Pomocí odkazů můžeme hledat text, který začíná dvěmi nečíselnými znaky a končí stejnými znaky v opačném pořadí:

 Poslední komponentou regulárních výrazů jsou modifikátory, které mění chování celého procesu vyhledávání. Základním modifikátorem je volba, zda chceme při vyhledávání rozlišovat velikost písmen. Pokud ano, jde o "case sensitive" hledání, pro které se používá znak "c", pokud ne, jde o "case insensitive" označované znakem "i".

 
vytvořil Institut biostatistiky a analýz Lékařské fakulty Masarykovy univerzity