Oracle посчитать количество вхождений в строку

Обновлено: 03.07.2024

REGEXP_COUNT complements the functionality of the REGEXP_INSTR function by returning the number of times a pattern occurs in a source string. The function evaluates strings using characters as defined by the input character set. It returns an integer indicating the number of occurrences of pattern . If no match is found, then the function returns 0.

source_char is a character expression that serves as the search value. It is commonly a character column and can be of any of the data types CHAR , VARCHAR2 , NCHAR , NVARCHAR2 , CLOB , or NCLOB .

pattern is the regular expression. It is usually a text literal and can be of any of the data types CHAR , VARCHAR2 , NCHAR , or NVARCHAR2 . It can contain up to 512 bytes. If the data type of pattern is different from the data type of source_char , then Oracle Database converts pattern to the data type of source_char .

REGEXP_COUNT ignores subexpression parentheses in pattern . For example, the pattern '(123(45))' is equivalent to '12345' . For a listing of the operators you can specify in pattern , refer to Appendix D, "Oracle Regular Expression Support".

position is a positive integer indicating the character of source_char where Oracle should begin the search. The default is 1, meaning that Oracle begins the search at the first character of source_char . After finding the first occurrence of pattern , the database searches for a second occurrence beginning with the first character following the first occurrence.

match_param is a text literal that lets you change the default matching behavior of the function. You can specify one or more of the following values for match_param :

'i' specifies case-insensitive matching.

'c' specifies case-sensitive matching.

'n' allows the period (.), which is the match-any-character character, to match the newline character. If you omit this parameter, then the period does not match the newline character.

'm' treats the source string as multiple lines. Oracle interprets the caret ( ^ ) and dollar sign ( $ ) as the start and end, respectively, of any line anywhere in the source string, rather than only at the start or end of the entire source string. If you omit this parameter, then Oracle treats the source string as a single line.

'x' ignores whitespace characters. By default, whitespace characters match themselves.

If you specify multiple contradictory values, then Oracle uses the last value. For example, if you specify 'ic' , then Oracle uses case-sensitive matching. If you specify a character other than those shown above, then Oracle returns an error.

If you omit match_param , then:

The default case sensitivity is determined by the value of the NLS_SORT parameter.

A period (.) does not match the newline character.

The source string is treated as a single line.

The following example shows that subexpressions parentheses in pattern are ignored:

In the following example, the function begins to evaluate the source string at the third character, so skips over the first occurrence of pattern:

Функция Oracle/PLSQL REGEXP_COUNT подсчитывает количество вхождений шаблона в строку. Эта функция, введенная в Oracle 11g, позволит вам подсчитать количество раз, когда подстрока встречается в строке с использованием сопоставления шаблонов регулярных выражений.

Синтаксис

Синтаксис функции Oracle/PLSQL REGEXP_COUNT:

REGEXP_COUNT( string, pattern [, start_position [, atch_parameter ] ] )

Параметры или аргументы

string
Строка для поиска. Строкой могут быть CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
pattern
Шаблон. Регулярное выражение для сопоставления. Это может быть комбинацией следующих значений:

Значение Описание
^ Соответствует началу строки. При использовании match_parameter с m , соответствует началу строки в любом месте в пределах выражения.
$ Соответствует концу строки. При использовании match_parameter с m , соответствует концу строки в любом месте в пределах выражения.
* Соответствует нолю или более вхождений.
+ Соответствует одному или более вхождений.
? Соответствует нолю или одному вхождению.
. Соответствует любому символу, кроме NULL.
| Используется как "OR", чтобы указать более одной альтернативы.
[ ] Используется для указания списка совпадений, где вы пытаетесь соответствовать любому из символов в списке.
[^ ] Используется для указания списка nonmatching, где вы пытаетесь соответствовать любому символу, за исключением тех кто в списке.
( ) Используется для групповых выражений в качестве подвыражений.
Соответствует m раз.
Соответствие как минимум m раз.
Соответствие как минимум m раз, но не более n раз.
\n n представляет собой число от 1 до 9. Соответствует n -му подвыражению находящемуся в ( ) перед \n.
[..] Соответствует одному сопоставлению элемента, который может быть более одного символа.
[::] Соответствует классу символов.
[==] Соответствует классу эквивалентности
\d Соответствует цифровому символу.
\D Соответствует не цифровому символу.
\w Соответствует текстовому символу.
\W Соответствует не текстовому символу.
\s Соответствует символу пробел.
\S Соответствует не символу пробел.
\A Соответствует началу строки или соответствует концу строки перед символом новой строки.
\Z Соответствует концу строки.
*? Соответствует предыдущему шаблону ноль или более вхождений.
+? Соответствует предыдущему шаблону один или более вхождений.
?? Соответствует предыдущему шаблону ноль или одному вхождению.
? Соответствует предыдущему шаблону n раз.
? Соответствует предыдущему шаблону, по меньшей мере n раз.
? Соответствует предыдущему шаблону, по меньшей мере n раз, но не более m раз.

start_position
Необязательный. Это позиция в строке, откуда начнется поиск. Если этот параметр опущен, по умолчанию он равен 1, который является первой позицией в строке.

match_parameter
Необязательный. Он позволяет изменять поведение соответствия для функции REGEXP_COUNT. Это может быть комбинацией следующих значений:

Значение Описание
'c' Выполняет чувствительное к регистру согласование.
'i' Выполняет не чувствительное к регистру согласование.
'n' Позволяет период символа (.) для соответствия символа новой строки. По умолчанию, период метасимволы.
'm' Выражение допускает, что есть несколько строк, где ^ это начало строки, а $ это конец строки, независимо от позиции этих символов в выражении. По умолчанию предполагается, что выражение в одной строке.
'x' Игнорируются символы пробелов. По умолчанию, символы пробелов совпадают, как и любой другой символ.

Функция REGEXP_COUNT возвращает числовое значение.

Примечание

  • Если для параметра match_parameter имеются конфликтующие значения, функция REGEXP_COUNT будет использовать последнее значение.
  • Если функция REGEXP_COUNT не обнаруживает какого-либо вхождение шаблона, она вернет 0.

Применение

Функцию REGEXP_COUNT можно использовать в следующих версиях Oracle / PLSQL:

Пример совпадения единичного символа

Рассмотрим простейший пример. Давайте посчитаем, сколько раз символ 'a' появляется в строке.
Например:

Функция REGEXP_SUBSTR используется для возврата подстроки, которая соответствует регулярному выражению в строке. Эта функция возвращает NULL, если совпадений не найдено. Эта функция может вернуть пустую строку, если регулярное выражение соответствует строке нулевой длины.

Синтаксис:

Параметры:

название Описание
source_char source_char - это символьное выражение, которое служит поисковым значением. Обычно это символьный столбец и может иметь любой из типов данных CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
шаблон шаблон является регулярным выражением. Обычно это текстовый литерал и может иметь любой из типов данных CHAR, VARCHAR2, NCHAR или NVARCHAR2. Он может содержать до 512 байт. Если тип данных шаблона отличается от типа данных source_char, то Oracle Database преобразует шаблон в тип данных source_char.
позиция Позиция является положительным целым числом, указывающим символ source_char, с которого Oracle должен начать поиск. По умолчанию это 1, что означает, что Oracle начинает поиск с первого символа source_char.
вхождение вхождение - это положительное целое число, указывающее, какое вхождение шаблона в source_char должно искать Oracle. По умолчанию это 1, что означает, что Oracle ищет первое вхождение шаблона. Если вхождение больше 1, то база данных ищет второе вхождение, начинающееся с первого символа, следующего за первым вхождением шаблона, и так далее. Если вхождение больше 1, то база данных ищет второе вхождение, начинающееся с первого символа, следующего за первым вхождением шаблона, и так далее.
match_param match_parameter - текстовый литерал, который позволяет вам изменить поведение функции по умолчанию для соответствия. Этот аргумент влияет только на процесс сопоставления и не влияет на replace_string. Вы можете указать одно или несколько из следующих значений для match_parameter:
subexpr Для шаблона с подвыражениями subexpr является неотрицательным целым числом от 0 до 9, указывающим, какое подвыражение в шаблоне должно быть возвращено функцией.

Относится к

Oracle 12c, Oracle 11g

Примеры: функция Oracle REGEXP_SUBSTR

В следующем примере проверяется строка, ища первую подстроку, ограниченную запятыми. База данных Oracle ищет запятую, за которой следует одно или несколько вхождений не запятых, за которыми следует запятая, и возвращает подстроку, включая начальную и конечную запятые.

Выход :

В этом примере аргумент subexpr используется для возврата первого подвыражения в pattern:

В этом примере используется аргумент subexpr для возврата четвертого подвыражения в шаблоне:

Предыдущая: REGEXP_REPLACE
Далее: ЗАМЕНА

Функция Oracle REGEXP_COUNT используется для подсчета количества раз, когда шаблон встречается в строке. Возвращает целое число, указывающее количество вхождений шаблона. Если совпадений не найдено, функция возвращает 0.

Синтаксис:

Параметры:

название Описание Типы данных
source_char Строка для поиска. CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
шаблон шаблон является регулярным выражением. CHAR, VARCHAR2, NCHAR или NVARCHAR2.
позиция Необязательный. Позиция является положительным целым числом, указывающим символ source_char, с которого начинается поиск. Если опущено, по умолчанию используется значение 1, которое является первой позицией в строке.
match_param Необязательный. Это позволяет вам изменять поведение соответствия для функции REGEXP_COUNT.

Вот список операторов форматирования шаблона:

оператор Описание
/ д Цифровой символ
/ D Нецифровый персонаж.
/ ш Слово персонажа.
/ W Несловесный персонаж.
/ s Пробельный символ.
/ S Не пробельный символ.
/ A Соответствует только в начале строки или перед символом новой строки в конце строки.
/ Z Соответствует только в конце строки.
*? Соответствует предыдущему элементу шаблона 0 или более раз (не допускается).
+? Соответствует предыдущему элементу шаблона 1 или более раз (не разрешено).
?? Соответствует предыдущему элементу шаблона 0 или 1 раз (не разрешено).
? Соответствует предыдущему элементу шаблона ровно n раз (нон-жадность).
? Соответствует предыдущему элементу шаблона по крайней мере n раз (не разрешено).
? Соответствует предыдущему элементу шаблона, по крайней мере, n, но не более, чем mtimes (nongreedy).

Вот список операторов регулярных выражений и метасимволов:

Вот список значений для match_param:

Относится к

Oracle 12c, Oracle 11g

Примеры: функция Oracle REGEXP_COUNT

В следующем примере будет возвращено количество раз, когда слово «The» появляется в строке.

Предыдущая: ДЛИНА
Далее: REGEXP_INSTR

Функция Oracle REGEXP_INSTR используется для возврата местоположения шаблона регулярного выражения в строке. Эта функция позволяет найти подстроку в строке, используя сопоставление с шаблоном регулярного выражения. Если совпадений не найдено, функция возвращает 0.

Синтаксис:

Параметр:

название Описание Типы данных
source_char Строка для поиска. CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB или NCLOB.
шаблон шаблон является регулярным выражением. CHAR, VARCHAR2, NCHAR или NVARCHAR2.
позиция Необязательный. Позиция является положительным целым числом, указывающим символ source_char, с которого начинается поиск. Если опущено, по умолчанию используется значение 1, которое является первой позицией в строке.
вхождение Необязательный. Это положительное целое число, указывающее, какое вхождение шаблона в source_char ищется. По умолчанию используется значение 1, что означает, что эта функция ищет первое вхождение шаблона.
return_opt Если указать 0, то он возвращает позицию первого символа вхождения. Это значение по умолчанию, и если указать 1, то оно возвращает позицию символа после вхождения.
match_param Необязательный. Это позволяет вам изменять поведение соответствия для функции REGEXP_COUNT.
subexpr Необязательный. Подвыражение представляет собой целое число от 0 до 9, указывающее, какое подвыражение в шаблоне является целью функции. Если значение равно нулю, возвращается позиция всей подстроки, которая соответствует шаблону. Если больше нуля, возвращается позиция фрагмента подстроки, которая соответствует номеру подвыражения subexpr в соответствующей подстроке. Функция возвращает ноль, если шаблон не имеет хотя бы субвыражений subexpr. Значение null subexpr возвращает NULL. Значение по умолчанию для subexpr равно нулю.

Вот список операторов форматирования шаблона:

оператор Описание
/ д Цифровой символ
/ D Нецифровый персонаж.
/ ш Слово персонажа.
/ W Несловесный персонаж.
/ s Пробельный символ.
/ S Не пробельный символ.
/ A Соответствует только в начале строки или перед символом новой строки в конце строки.
/ Z Соответствует только в конце строки.
*? Соответствует предыдущему элементу шаблона 0 или более раз (не допускается).
+? Соответствует предыдущему элементу шаблона 1 или более раз (не разрешено).
?? Соответствует предыдущему элементу шаблона 0 или 1 раз (не разрешено).
? Соответствует предыдущему элементу шаблона ровно n раз (нон-жадность).
? Соответствует предыдущему элементу шаблона по крайней мере n раз (не разрешено).
? Соответствует предыдущему элементу шаблона, по крайней мере, n, но не более, чем mtimes (nongreedy).

Вот список операторов регулярных выражений и метасимволов:

Вот список значений для match_param:

Относится к

Oracle 12c, Oracle 11g

Примеры: функция Oracle REGEXP_INSTR

В следующем примере проверяется строка, ища вхождения одного или нескольких непустых символов. Поиск начинается с первого символа в строке и возвращает начальную позицию (по умолчанию) третьего вхождения одного или нескольких непустых символов.

В следующем примере проверяется строка, ища вхождения слов, начинающихся с t, e или w, независимо от регистра, за которыми следуют любые три алфавитных символа. Поиск начинается с третьего символа в строке и возвращает позицию в строке символ, следующий за вторым вхождением с t, e или w, независимо от регистра.

Читайте также: