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}');
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgefztR9La5KgwZOViYkpGL8xVWC3owrJXnnD8HP05_J8jNU29sAUEnVkSWUpfWEDqZDtRMTG11WnrylqLXiOtgJPrVSzzpP0IPqFCrgWkU6-3NOLLh6JmRx72RWsrBSlJRSmuwM9MYM2dz/s1600/5.png)
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