В Oracle, REGEXP_COUNT()
функцията връща броя на поява на шаблон в изходен низ.
Синтаксис
Синтаксисът е така:
REGEXP_COUNT (source_char, pattern [, position [, match_param]])
Къде:
source_char
е символен израз, който служи като стойност за търсене.pattern
е регулярният израз.position
е положително цяло число, което указва къде да започне търсенето. По подразбиране е1
, което означава, започнете търсенето от първия знак.match_param
ви позволява да промените поведението на съвпадение по подразбиране на функцията. Например, той ви позволява да зададете чувствителност към малки и големи букви, как да се обработват множество редове и интервали и т.н.
Пример
Ето един основен пример за използване на REGEXP_COUNT()
в Oracle:
SELECT
REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;
Резултат:
1
В този случай има едно съвпадение.
Регулярните изрази могат да бъдат много мощни и този пример използва много прост пример. За да използвате REGEXP_COUNT()
ефективно, ще трябва да знаете правилния модел, който да използвате за желания резултат. Примерите на тази страница се фокусират върху REGEXP_COUNT()
самата функция, а не върху регулярните изрази.
Няма съвпадение
Ето пример, където няма съвпадение:
SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;
Резултат:
0
Няма съвпадение, така че 0
се връща.
Множество съвпадения
Ето пример с множество съвпадения:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;
Резултат:
2
В този случай има две съвпадения.
Начална позиция
Можете да посочите начална позиция:
SELECT
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;
Резултат:
1
Така че тук получаваме само едно съвпадение. Това е така, защото търсенето започва едва след първото появяване (позиция 8).
Чувствителност на регистрите
REGEXP_COUNT()
функцията следва правилата за определяне на съпоставяне на Oracle, които дефинират съпоставянето, което да се използва при съпоставяне на низа с шаблона.
Въпреки това, можете изрично да посочите чувствителност към малки и малки букви с незадължителния четвърти аргумент. Когато направите това, той отменя всяка чувствителност към малки и малки букви или чувствителност към акцент на определеното съпоставяне.
Можете да посочите i
за съвпадение без значение на главни и c
за съвпадение, чувствително към главни букви.
Ето един пример:
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;
Резултат:
Default Case Insensitive Case Sensitive __________ ___________________ _________________ 0 1 0
Тук съпоставянето ми е чувствително към главни букви. Другите два низа бяха принудени към съвпадение, независимо от главните и главни букви, съответно.
Нулеви аргументи
С изключение на четвъртия аргумент, предоставящ null
за аргумент води до 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;
Резултат:
1 2 3 4 _______ _______ _______ ____ null null null 0
По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null
трябва да бъдат върнати.
Грешен брой аргументи
Предаването на никакви аргументи на функцията или твърде малко води до грешка:
SELECT REGEXP_COUNT()
FROM DUAL;
Резултат:
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:
Същото важи и когато предадем твърде много аргументи:
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;
Резултат:
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:
Повече информация
REGEXP_COUNT()
функцията (както и другата реализация на регулярни изрази на Oracle) съответства на стандарта за регулярни изрази на интерфейса на IEEE Portable Operating System Interface (POSIX) и на Указанията за регулярни изрази на Unicode на Unicode Consortium.
Вижте документацията на Oracle за повече информация и примери за REGEXP_COUNT()
функция.