小编use*_*927的帖子

REGEXP_LIKE奇怪的行为

我开始对REGEXP_LIKE功能进行一些研究,这是我在oracle网站上发现的:

REGEXP_LIKE类似于LIKE条件,除了REGEXP_LIKE执行常规>表达式匹配而不是LIKE执行的简单模式匹配

所以,我试着比较两者:

1)LIKE如果我们拥有%_可以使用;

所以,我跑:

SELECT 'true' 
  FROM dual 
 WHERE 'true' like '%ru_'; 
Run Code Online (Sandbox Code Playgroud)

我会按预期在输出中得到"真实";

2)在REGEXP案例中,如果我运行:

SELECT 'true' 
  FROM dual WHERE REGEXP_LIKE('true', '[[:alpha:]]');
Run Code Online (Sandbox Code Playgroud)

要么

SELECT 'true' 
  FROM dual WHERE REGEXP_LIKE('true', 'u');
Run Code Online (Sandbox Code Playgroud)

在任何一种情况下,我都会在结果集中得到"真实".我希望regexp_like根据regexp匹配整个字符串,而不是只匹配给定示例中的一个字符;

我也希望以此为例

SELECT 'true' 
  FROM dual WHERE REGEXP_LIKE('true', '[[:alpha:]]');
Run Code Online (Sandbox Code Playgroud)

成为

SELECT 'true' 
  FROM dual 
 WHERE REGEXP_LIKE('true', '[[:alpha:]]+'); 
Run Code Online (Sandbox Code Playgroud)

这意味着[[:alpha:]]可以多次应用令牌,这将与reg exp匹配.如果没有+*,[[:alpha:]]令牌只匹配一个只有"t"的字符,并且由于只需要一个匹配,它将不再匹配失败匹配的任何字符.

对我来说这是一种奇怪的行为.如果我错了,请纠正我.谢谢.

编辑:附加说明:

为什么我首先开始研究它的问题是确保名字不包含任何数字,但只是字母和练习考试会给出以下答案:
A.

ALTER TABLE CUSTOMERS ADD CONSTRAINT cust_f_name CHECK(REGEXP_LIKE(cust_first_name, '^A-Z'))NOVALIDATE; …
Run Code Online (Sandbox Code Playgroud)

regex oracle

1
推荐指数
1
解决办法
303
查看次数

标签 统计

oracle ×1

regex ×1