niedziela, 1 grudnia 2013

Wyrażenia regularne w Oracle (REGEXP)

Wyrażenia regularne

Funkcje

Wyrażenia regularne pozwalają nam wynajdywać w tekście fragmenty wg wzorców. Związane z regexp jest 5 funkcji:


REGEXP_COUNT

funkcja dostępna od wersji 11g. Zwraca ilość wystąpień elementów pasujących do wzorca. Poniższy przykład zwraca ilość liczb występujących w tekście:



select regexp_count('fff4ff563fffff','[[:digit:]]')
from dual;

















REGEXP_REPLACE




Funkcja zamienia elementy pasujące do wzorca na podany zamiennik. Na poniższym przykładzie widzimy zamianę wszystkich cyfr na ciąg XXX.



select regexp_replace('fff4ff563fffff','[[:digit:]]','XXX')

from dual;
















REGEXP_SUBSTR

Funkcja zwraca z podanego tekstu pierwszy element pasujący do wzorca. Poniżej widzimy wycięcie pierwszego przynajmniej 3 elementowego zbioru cyfr z tekstu:


select regexp_substr('eeeeee23ee44445eee444445','[[:digit:]]{3,}')

from dual;

















REGEXP_INSTR

Funkcja zwraca pozycję ciągu tekstowego pasującego do wzorca. Poniżej określenie pozycji elementu składającego się z przynajmniej 4 cyfr:



select regexp_instr('eeeeee23ee44445eee444445','[[:digit:]]{4,}')

from dual;


















REGEXP_LIKE

Służy sprawdzaniu czy podany tekst pasuje do wzorca:



select * from employees where
regexp_like(phone_number,'[[:digit:]]{3}\.[[:digit:]]{2}\.[[:digit:]]{4}\.[[:digit:]]{6}');









Wzorce w wyrażeniach regularnych




.
Dowolny znak
+
Jeden lub więcej wystąpień
?
Zero lub jedno wystąpienie
*
Dowolna ilość wystąpień (w tym zero)
{3}
Dokładnie trzy wystąpienia
{3,}
Przynajmniej trzy wystąpienia
{3,6}
Od trzech do sześciu wystąpień
|
Lub
[[:digit:]]
Cyfra
[[:alpha:]]
Litera
[[:alnum:]]
Znak alfanumeryczny
\
Wyłączenie znaku jako specjalnego. Np. jeśli zechcemy użyć kropki jako w kontekście znaku tekstowego, a nie znaku specjalnego oznaczającego dowolny znak






To oczywiście nie wszystkie możliwe wzorce, jest ich znacznie więcej. Wzorce dotyczące ilości wystąpień dotyczą zawsze poprzedzającego elementu. Kilka przykładów:



'[[:digit:]]{4,}'
Przynajmniej 4 cyfry
([[:alnum:]]| |\.|-){8,14}
Ciąg składający się z od 8 do 14 elementów wśród których mogą wystąpić dowolne litery i cyfry, spacje, kropki lub myślniki
[[:alnum:]]{1,}(\.[[:alnum:]]{1,})?@[[:alnum:]]{1,}\.[[:alpha:]]{2,4}
Przynajmniej jednoelementowy wyraz składający się z liter lub cyfr, po którym może nastąpić ciąg rozpoczynający się od kropki i składający się z przynajmniej jednej litery lub cyfry, po których nastąpi znak @, po których nastąpi przynajmniej jednoelementowy ciąg alfanumeryczny, po którym nastąpi kropka i ciąg składający się z samych tylko liter o całkowitej długości od 2 do 4 znaków. Czyli znajdziemy element wyglądający jak adres email :)






Brak komentarzy:

Prześlij komentarz