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 @)