Oracle SQL开发人员正则表达式错误

Oracle SQL开发人员正则表达式错误,sql,regex,oracle-sqldeveloper,Sql,Regex,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');
开发商从不让步。它一直在说违反了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');
我也不明白

为什么?

编辑:这就是问题所在:从逻辑上讲,正则表达式是正确的。但不知何故,oraclesql开发人员并没有让步


如果你以1或2个大写字母开头,不管接下来会发生什么,你应该这样做:

^[A-Z]{1,2}.*

这里的意图是什么?你想要1个或2个大写字母,还是只想要以1个或2个大写字母开头的字母?有什么区别?我假设以1个大写字母开始=想要1个大写字母,以2个大写字母开始=想要2个大写字母。不幸的是,这不能回答我的问题。请以1个大写字母开始或以2个大写字母开始。如果它以1个大写字母开头,那么后面应该没有任何内容。然后你想要第二个版本。但我关心接下来会发生什么。我想以确切的字母开头和结尾。这就是为什么我在正则表达式中加入了美元符号。如果您只需要第一个字母的大写字母,其余的小写字母,那么就这样写
^[A-Z]{1,1}[A-Z]+.
否则如果您需要第一个字母的大写字母,其余的大写字母或者小写字母,那么
^[A-Z]{1,1}[A-zA-Z]+
否则如果您需要第一个字母的大写字母或者两个大写字母,那么就改变
[A-Z]{1,1}
by
[A-Z]{1,2}< /代码>,我希望这能帮助YouRoRy我不公平。是的,解决办法是有效的。但是我想知道,美元符号发生了什么?我的意思是,在这个例子中,$$似乎是Bug。$标志意味着在多行的情况下匹配文本字符串的结尾或行的末尾,并且在U上测试最后一个字母的情况下使用,或者您希望使所有文本匹配。xt$
将测试孔字符串是否与“test”匹配,在case
text$
中,将测试字符串是否以“test”结尾,在case
^text
中,他将测试字符串是否以“test”开头在示例中,如果名称的结尾可以是somting,则应添加$sign
^[A-Z]{1,2}$
,在这个表达式中,我要说的是以两个大写字母开头和结尾。我的问题是:为什么它不起作用?为什么它在删除美元符号后起作用。这让我最困扰。
.* mean 1 or more character exept \n (nex line)