POSIX Extended Regular Expressions

Poza POSIX Basic Regular Expresion (BRE) istniej również POSIX Extended Regular Expressions (ERE), czyli rozszerzone wyrażenia regularne POSIX. W porównaniu do BRE w ERE pojawią się kilka nowych metazanków:

C? 0 lub 1 wystąpienie C
C+ 1 lub więcej wystąpień C
A|Balternatywa A lub B

Ponadto zmienia się znaczenie niektórych znaków specjalnych poprzedzonych znakiem "\" :

\( \)oznacza ( )
\{ \}oznacza { }

Poza tym, ERE nie wspiera referencji do pasującego wzorca. To jest, w BRE \1 oznacza referencje do pierwszego dopasowania, \2 do drugiego itd. Ta właśnie wsteczna referencja (backreference), którą można ogólnie zapisać jako \n, nie obowiązuje w ERE.


Przykłady ERE:

'[hc]+at'pasuje do "hat", "cat", "hhat", "chat", "hcat", "ccchat", itd, ale nie pasuje do "at"
'[hc]?at'pasuje do "hat", "cat", oraz "at"
'[hc]*at'pasuje do "hat", "cat", "hhat", "chat", "hcat", "ccchat", "at", itd
'cat|dog'pasuje do "cat" or "dog".

Cudzysłowy '' oraz ' nie są oczywiście elementem wyrażenia regularnego, dodałem je dla czytelności.

POSIX Extended Regular Expressions zazwyczaj mogą być używane z narzędziami (programami) nowszych wersji Unix/Linux poprzez dodanie flagi -E do wywołanego programu.

Reprezentacje znaków

Znaki specjalne mają swoją reprezentacje, tzn. są specjalnie oznaczane:

\adzwonek
\fform-feed
\rpowrót karetki
\nnowa linia
\ttabulacja pozioma
\vtabulacja pionowa
\bbackspace
\eznak ESC
\ooctalznak w zapisie ósemkowym
\xhexznak w zapisie szesnastkowym

Klasy znaków POSIX

Standard POSIX definiuje tzw. kasy, tj. grupy znaków. Dzięki temu poprzez symbol klasy można odwołać się do grupy znaków. Patrz tabela poniżej:

POSIX ASCII Znaczenie
[:alnum:] [A-Za-z0-9] znaki alfanumeryczne
[:word:] [A-Za-z0-9_] znaki alfanumeryczne oraz znak "_"
[:alpha:] [A-Za-z] znaki alfabetu
[:blank:] [ \t] spacja i znak tabulacji
[:cntrl:] [\x00-\x1F\x7F] znaki kontrolne
[:digit:] [0-9] cyfry
[:graph:] [\x21-\x7E] znaki widoczne
[:lower:] [a-z] małe litery
[:print:] [\x20-\x7E] znaki widoczne i spacje
[:punct:] [-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~] znaki interpunkcji
[:space:] [ \t\r\n\v\f] znaki nie widoczne (białe znaki)
[:upper:] [A-Z] duże litery
[:xdigit:] [A-Fa-f0-9] znaki używane w szesnastkowym zapisie liczb

Klasy znaków POSIX mogą być używane jedynie w wyrażeniu zakresu, tj. pomiędzy [ oraz ]. Dla przykładu [[:upper:]ab] oznacza dużą literę, a później "a" oraz "b".

Perl extensions

Do klas znaków POSIX Perl, a wraz z nim inne języki (java, java script), dodał skrócone oznaczenia istniejących już klas oraz nowe klasy. Te nowe kasy, są dopełnieniami istniejących klas. Dla przykładu \d oznacza cyfrę, zaś \D jest tym samym, co [^\d], czyli oznacza każdy znak, który cyfrą nie jest. Podobnie dla słów \w i spacji \s.

POSIXPerl ASCII Znaczenie
[[:word:]]\w[A-Za-z0-9_]znaki alfanumeryczne oraz "_"
[^[:word:]]\W, [^\w][^A-Za-z0-9_]znaki inne niż znaki alfanumeryczne oraz inne niż znak "_"
[[:digit:]]\d[0-9]cyfry
[^[:digit:]]\D, [^\d][^0-9]znaki inne niż cyfry
[[:space:]]\s[ \t\r\n\v\f]białe znaki
[^[:space]]\S, [^\s] [^ \t\r\n\v\f]znaki inne niż białe znaki

CDN...


Tomasz Zin

Na podstawie O'Reilly "Regular Expresion" Tony Stubblebine; August 2003, ISBN : 0-596-00415-X. Wyrażona powyżej opinia jest prywatnym poglądem autora wypowiedzi. Korzystasz na własną odpowiedzialność.