Функции регулярных выражений Oracle

#regex #oracle

#Регулярное выражение #Oracle

Вопрос:

Я работаю над Oracle 10gR2.

Я работаю над столбцом, в котором хранится имя пользователя. Допустим, что одним из значений в этом столбце является «Ankur». Я хочу получить все записи, где username представляет собой объединенную строку «Ankur», за которой следуют некоторые числовые цифры, такие как «Ankur1», «Ankur2», «Ankur345» и так далее. Я не хочу получать записи с такими значениями, как «Ankurab1» — то есть все, что является конкатенацией некоторых символов с моей входной строкой.

Я пытался использовать функции регулярных выражений для достижения желаемого результата, но не смог.

Я пытался:

 SELECT 1 FROM dual WHERE regexp_like ('Ankur123', '^Ankur[:digit:]$');
  

Кто-нибудь может мне здесь помочь?

Комментарии:

1. Я пытался использовать REGEX_LIKE SELECT 1 FROM dual WHERE regexp_like ('Ankur123', '^Ankur[:digit:]$');

2. Это не работает, поскольку я считаю, что функции регулярных выражений ожидают только символы и шаблоны подстановочных знаков для сопоставления и вычисления выражений. Я не знаю, как я могу передать определенное значение, а затем указать символы подстановки для соответствия

Ответ №1:

Oracle использует POSIX ERES (которые не поддерживают обычное d сокращение), поэтому вы можете использовать

 ^Ankur[0-9] $
  

Ваша версия тоже почти сработала бы:

 ^Ankur[[:digit:]] $
  

Один набор [...] для класса символов и один для [:digit:] подмножества. И, конечно, a , чтобы разрешить больше, чем одну цифру.

Ответ №2:

Вы были близки

Попробуйте regexp_like ('Ankur123', '^Ankur[[:digit:]] $') вместо этого.

Обратите [[ внимание на то, что вместо одного [ и перед $ .

Без регулярного выражения соответствует только ровно одной цифре после строки Ankur.