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|B | alternatywa 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:
| \a | dzwonek |
| \f | form-feed |
| \r | powrót karetki |
| \n | nowa linia |
| \t | tabulacja pozioma |
| \v | tabulacja pionowa |
| \b | backspace |
| \e | znak ESC |
| \ooctal | znak w zapisie ósemkowym |
| \xhex | znak 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.
| POSIX | Perl | 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 |
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ść.
