Teoria

  • Podstawowym elementem wyrażenia regularnego jest atom tzn.:
    • . = dopasuj dowolny znak, lub
    • ^ = dopasuj początek linii, lub
    • $ = dopasuj koniec linii, lub
    • znak = dopasuj dokładnie ten znak, lub
    • [zestaw znaków] = dopasuj którykolwiek z tych znaków:
      • [abc] = dopasuj a, b, lub c
      • [a-cx-z] = dopasuj a, b, c, x, y lub z
      • [^abc] = dopasuj wszystko poza a, b lub c
    • jeden z predefiniowanych typów:
      • [[:digit:]] = dopasuj dowolną cyfrę
      • [[:alpha:]] = dopasuj dowolną literę (małą lub wielką)
      • [[:alnum:]] = dopasuj dowolną cyfrę lub literę
      • [[:lower:]] = dopasuj dowolną małą literę
      • [[:upper:]] = dopasuj dowolną wielką literę
      • [[:space:]] = dopasuj dowolny biały znak (w kodzie ASCII jest ich więcej niż tylko spacja, tabulator i nowa linia)
    • (zestaw atomów) = dopasuj wszystkie atomy zgodnie z regułami jak powyżej
  • Po każdym atomie może się pojawić jeden z tych znaków:
    • * = dopasuj zero lub więcej tego atomu
    • + = dopasuj jeden lub więcej
    • ? = dopasuj zero lub jeden
    • {m} = dopasuj dokładnie m powtórzeń
    • {m,} = dopasuj co najmniej m powtórzeń
    • {m,n} = dopasuj co najmniej m powtórzeń, ale nie więcej niż n
  • Sekwencja atomów (lub ew. atomów z informacją o powtórzeniach) to część (piece) = dopasuj po kolei atomy od lewej do prawej
  • Części mogą być oddzielone znakiem | oznaczającym rozgałęzienie (branch) = dopasuj jedną z części (albo po lewej stronie | albo po prawej)

Przykłady

  • a+ = dopasuj dowolnie długi ciąg liter a np.: a, aa, aaa, ...
  • a?b = dopasuj ab lub b
  • [A-Z][a-z]+[[:digit:]]+ = dopasuje napis zaczynający się od wielkiej litery, po której nastąpi ciąg małych liter zakończony ciągiem cyfr np. Test2012, Wdi2010, Napis11111111
  • abc|def = dopasuj albo abc albo def
  • (abc)+ = dopasuj powtórzenia napisu abc np. dla wejścia abcabcabb dopasuje się pierwsze sześć znaków
  • ([[:alnum:]]|[.-])+@([[:alnum:]]|[.-])+ = dopasuj adres e-mail (dwa człony z liter, cyfr i/lub kropek i myślników oddzielone znakiem @)