Ошибка выражения регулярных выражений Oracle SQL Developer

#sql #regex #oracle-sqldeveloper

#sql #регулярное выражение #oracle-sqldeveloper

Вопрос:

В файл сценария я вставил следующий код.

 drop table Test;
create table Test(
name char(2) unique not null,
constraint name_c check(
regexp_like(name, '^[A-Z]{1,2}$', 'c')
)
);

insert into Test values ('B');
  

Разработчик никогда не сдвинется с места. Он продолжает говорить, что нарушает ограничение name_c, и я не понимаю, почему. Для меня регулярное выражение выглядит нормально.

Однако некоторые варианты завершились успешно, например, удаление знака доллара

 drop table Test;
create table Test(
name char(2) unique not null,
constraint name_c check(
regexp_like(name, '^[A-Z]{1,2}', 'c')
)
);

insert into Test values ('B');
  

И я тоже не понимаю.

Почему?

Редактировать: это проблема: логически регулярное выражение правильное. Но почему-то Oracle SQL Developer не сдвинулся с места.

введите описание изображения здесь

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

1. Что здесь подразумевается? Вам нужны 1 или 2 заглавные буквы или просто что-то, что начинается с 1 или 2 заглавных букв?

2. В чем различия? Я предполагаю, что начните с 1 заглавной буквы = хотите 1 заглавную букву, начните с 2 заглавных букв = хотите 2 заглавные буквы

3. К сожалению, это не отвечает на мой вопрос.

4. Начните с 1 заглавной буквы или начните с 2 заглавных букв. Если оно начинается с 1 заглавной буквы, то за ним ничего не должно быть.

5. Тогда вам нужна вторая версия.

Ответ №1:

если вы решили начать с 1 или 2 заглавных букв и не имеет значения, что будет дальше, вы должны сделать это следующим образом :

 ^[A-Z]{1,2}.*
  
 .* mean 1 or more character exept n (nex line)
  

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

1. Но мне не все равно, что будет дальше. Я хочу начинать и заканчивать точными буквами. Вот почему я помещаю знак доллара в регулярное выражение. И это не работает в oracle sql developer.

2. если вам нужна только первая буква в верхнем регистре, а остальные в нижнем регистре, тогда напишите это так, ^[A-Z]{1,1}[a-z] . иначе, если вы хотите, чтобы первая буква была прописной, а остальные — верхними или нижними, тогда ^[A-Z]{1,1}[a-zA-Z] , если вы хотите, чтобы 1 или буксировка были верхними в первом, тогда измените [A-Z]{1,1} [A-Z]{1,2} , я желаю, чтобы это помогло вам

3. Извините, я был несправедлив. Да, решение работает. Но мне интересно, что случилось со знаком доллара? Я имею в виду, что в этом примере $ кажется ошибочным.

4. знак $ означает совпадение конца текстовой строки или конца строки в многострочном регистре, и он используется в случае, если вы прошли тест на последнюю букву или хотите, чтобы весь текст совпадал. Пример Par ^text$ , который проверит, соответствует ли строка с отверстием ‘test’, и в случае text$ , если это проверит, заканчивается ли строка на ‘test’, и в случае ^text , если он проверит, начинается ли строка с ‘test’ в вашем примере, если имя может быть чем-то другим в конце, тогда вам следует добавить знак $

5. ^[A-Z]{1,2}$ в этом выражении то, что я говорю, начинается и заканчивается 2 заглавными буквами. Мой вопрос: почему это не работает? И почему это работает после удаления знака доллара. Это беспокоит меня больше всего.