Регуларни изрази

Замисли да радиш као програмер у банци и да треба да провериш да ли је корисник унео исправан број рачуна, или да радиш на веб-сајту и да мораш да провериш да ли је адреса електронске поште коју је корисник унео заиста валидна. Можда развијаш апликацију која треба да пронађе све датуме у тексту, или све бројеве телефона који почињу са +381.

Овакве типове задатака можеш решити помоћу регуларних израза (енгл. Regular Expressions - Regex) – моћног алата који ти омогућује да дефинишеш сложене обрасце за претрагу, валидацију и манипулацију стрингова на веома ефикасан начин.

Регуларни израз је низ карактера којим дефинишеш образац за претрагу у тексту, а образац је низ карактера који описује какав текст тражиш. На пример:

  • ако тражиш реч „programiranje”, образац је једноставно programiranje

  • ако тражиш било коју цифру, образац је \d

  • ако тражиш три цифре заредом, образац је \d\d\d или краће \d{3}.

Рад са регуларним изразима у језику C# дефинисан је у именском простору System.Text.RegularExpressions, односно главној класи која се зове Regex.

Ако је задатак да пронађеш тачно одређени број телефона…

string tekst = "Moj broj telefona je 063/123-4567";
string sablon = "063/123-4567";
bool nadjeno = Regex.IsMatch(tekst, sablon);
Console.WriteLine($"Pronadjeno: {nadjeno}"); // Pronadjeno: True

…решење је прилично једноставно. Међутим, шта ако је задатак да пронађеш било који број телефона написан у том формату? Решење подразумева коришћење метакарактера. То су специјални карактери који имају посебно значење.

  • цифра (0-9) \d

  • слово, цифра или _ \w

  • бели простор (space, tab, newline) \s

  • све што није цифра \D

  • све што није слово/цифра/_ \W

  • све што није бели простор \S

  • било који карактер .

  • почетак стринга ^

  • крај стринга $

Карактерски скупови се стављају у угласте заграде [] и дефинишу скуп карактера од којих се било који може појавити.

  • било које од слова a, b или c [abc]

  • било које мало слово [a-z]

  • било које велико слово [A-Z]

  • било која цифра [0-9] или \d

  • све осим a, b или c [^abc]

Квантификатори говоре колико пута се претходни карактер или група понављају.

  • нула или више понављања *

  • једно или више понављања +

  • нула или једно понављање ?

  • тачно \(n\) понављања {n}

  • \(n\) или више понављања {n,}

  • од \(n\) до \(m\) понављања {n,m}

Сада, када си се упознао са метакарактерима, можеш да користиш основне операције у којима можеш да их примениш.