#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.