S-Lang wspiera następujące wyrażenia regularne (dalej WR)
Dodatkowo wspierane są również następujące wyrażenia:. każdy znak, oprócz znaku nowej linii * zero lub więcej wystąpień poprzedniego WR + jedno lub więcej wystąpień poprzedniego WR ? zero lub jedno wystąpienie poprzedniego WR ^ początek linii $ koniec linii [ ... ] każdy pojedyńczy znak między nawiasami. Na przykład [-02468] oznacza '-' lub każdą z liczb parzystych, a [-0-9a-z] oznacza '-', każdą cyfrę i litery z przedziału a-z. \< początek słowa \> koniec słowa \( ... \) \1, \2, ..., \9 Ciąg znaków znaleziony jako wynik n-tego wyrażenia \( ... \)
Poniżej znajduje się kilka prostych przykładów:\c włącz rozróżnianie wielkości znaków \C wyłącz rozróżnianie wielkości znaków \d każda cyfra \e znak ESC
"^int "
znajdzie "int "
na początku linii
"\<money\>"
znajdzie "money"
, ale tylko, jeśli jest to osobne słowo
"^$"
znajdzie pustą linię.
Trochę bardziej skomplikowanym wyrażeniem jest
"\(\<[a-zA-Z]+\>\)[ ]+\1\>"
które znajdzie każde powtórzone po sobie słowo ("jest jest"). Zwróć uwagę na
sposób użycia operatorów grupujących
\(
oraz \)
do zdefiniowania tekstu znalezionego
przez zacytowanie powyżej WR. Tekst ten jest potem oznaczany jako
\1
.
Pamiętaj, że w kodzie S-Lang-a (i C) znak '\'
należy 'podwoić', gdyż używany jest on normalnie do cytowania
znaków niedrukowalnych.
Najistotniejszą różnicą jest niewspieranie przez S-Langowe WR
operatora OR (|
). Oznacza to, że wyrażenia
"a|b"
lub "a\|b"
nie mają znaczenia, jakie
mają w przypadku egrepa.
Drugą istotną różnicą jest sposób wykorzystania grupujących operatorów
\(
i \)
. W S-Langowych WR używane są one tylko
do oznaczenia znalezionego tekstu. Wyrażenie
"@\([a-z]*\)@.*@\1@"
pasuje do ciągu xxx@abc@silly@abc@yyy
,
ponieważ \1
oznacza w nim tekst
odnaleziony przez wyrażenie zawarte pomiędzy \(
i
\)
. W bieżącej wersji
S-Langa nie ma możliwości użycia operatorów grupujących do utworzenia z
kilku WR wyrażenia pojedyńczego, tzn. w S-Langu wyrażenie
\(hello\)*
nie
jest wzorem oznaczającym jedno lub więcej wystąpienie słowa "hello", tak
jak byłoby to w przypadku e-grepa.
tłum. Tomasz Sienicki, tsca @ edb . dk
Adres tej strony: http://www.geocities.com/tsca.geo/slang/regexp.html