W Oracle REGEXP_COUNT()
funkcja zwraca liczbę wystąpień wzorca w ciągu źródłowym.
Składnia
Składnia wygląda tak:
REGEXP_COUNT (source_char, pattern [, position [, match_param]])
Gdzie:
source_char
to wyrażenie znakowe, które służy jako wartość wyszukiwania.pattern
jest wyrażeniem regularnym.position
jest dodatnią liczbą całkowitą, która określa, gdzie rozpocząć wyszukiwanie. Wartość domyślna to1
, czyli rozpocznij wyszukiwanie od pierwszego znaku.match_param
pozwala zmienić domyślne zachowanie dopasowania funkcji. Na przykład pozwala określić wielkość liter, sposób obsługi wielu linii i spacji itp.
Przykład
Oto podstawowy przykład użycia REGEXP_COUNT()
w Oracle:
SELECT
REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;
Wynik:
1
W tym przypadku jest jeden mecz.
Wyrażenia regularne mogą mieć bardzo duże możliwości, a w tym przykładzie użyto bardzo prostego przykładu. Aby użyć REGEXP_COUNT()
skutecznie, będziesz musiał znać właściwy wzór, aby uzyskać pożądany efekt. Przykłady na tej stronie skupiają się na REGEXP_COUNT()
funkcji, a nie na wyrażeniach regularnych.
Brak dopasowania
Oto przykład, w którym nie ma dopasowania:
SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;
Wynik:
0
Brak dopasowania, więc 0
jest zwracany.
Wiele meczów
Oto przykład z wieloma dopasowaniami:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;
Wynik:
2
W tym przypadku są dwa dopasowania.
Pozycja początkowa
Możesz określić pozycję początkową:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;
Wynik:
1
Więc tutaj mamy tylko jeden mecz. Dzieje się tak, ponieważ wyszukiwanie rozpoczyna się dopiero po pierwszym wystąpieniu (pozycja 8).
Wrażliwość na wielkość liter
REGEXP_COUNT()
Funkcja jest zgodna z regułami określania sortowania Oracle, które definiują sortowanie, które ma być używane podczas dopasowywania ciągu do wzorca.
Można jednak jawnie określić rozróżnianie wielkości liter za pomocą opcjonalnego czwartego argumentu. Gdy to zrobisz, zastępuje to rozróżnianie wielkości liter lub akcentu w określonym zestawieniu.
Możesz określić i
dla dopasowania bez rozróżniania wielkości liter i c
do dopasowywania z uwzględnieniem wielkości liter.
Oto przykład:
SELECT
REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;
Wynik:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ 0 1 0
Tutaj w moim zestawieniu rozróżniana jest wielkość liter. Pozostałe dwa ciągi zostały zmuszone do dopasowania odpowiednio bez rozróżniania i rozróżniania wielkości liter.
Argumenty zerowe
Z wyjątkiem czwartego argumentu, podając null
dla argumentu daje wynik null
:
SET NULL 'null';
SELECT
REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;
Wynik:
1 2 3 4 _______ _______ _______ ____ null null null 0
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Niewłaściwa liczba argumentów
Przekazanie funkcji bez argumentów lub za mało, skutkuje błędem:
SELECT REGEXP_COUNT()
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT REGEXP_COUNT() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action:
To samo dotyczy sytuacji, gdy przekazujemy zbyt wiele argumentów:
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;
Wynik:
Error starting at line : 1 in command - SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops') FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00939: too many arguments for function 00939. 00000 - "too many arguments for function" *Cause: *Action:
Więcej informacji
REGEXP_COUNT()
funkcja (jak również inna implementacja wyrażeń regularnych Oracle) jest zgodna ze standardem wyrażeń regularnych IEEE Portable Operating System Interface (POSIX) oraz z wytycznymi Unicode dotyczącymi wyrażeń regularnych Unicode Consortium.
Więcej informacji i przykłady funkcji REGEXP_COUNT()
można znaleźć w dokumentacji Oracle funkcja.