Regex 可以创建';它能匹配空值吗?

Regex 可以创建';它能匹配空值吗?,regex,oracle,plsql,Regex,Oracle,Plsql,在Oracle中,是否可以使用单个正则表达式同时匹配特定字符串格式和空字符串 大致如下: SELECT 1 FROM DUAL WHERE REGEXP_LIKE('12345', '^([1-5]{5})|NULL$'); SELECT 1 FROM DUAL WHERE REGEXP_LIKE('', '^([1-5]{5})|NULL$'); SELECT 1 FROM DUAL WHERE REGEXP_LIKE(NULL, '^([1-5]{5})|NULL$')

在Oracle中,是否可以使用单个正则表达式同时匹配特定字符串格式和空字符串

大致如下:

SELECT 1
  FROM DUAL
 WHERE REGEXP_LIKE('12345', '^([1-5]{5})|NULL$');

SELECT 1
  FROM DUAL
 WHERE REGEXP_LIKE('', '^([1-5]{5})|NULL$');

SELECT 1
  FROM DUAL
 WHERE REGEXP_LIKE(NULL, '^([1-5]{5})|NULL$');
其中正则表达式的“NULL”部分被视为字符类而不是字符串文本,并且所有三个查询都返回1

我正在编写一些数据验证例程,希望只存储/使用一个正则表达式来确定格式和输入字符串是否可以为空,而不是为每个数据元素分别指定这些验证规则

谢谢, 杰夫

一个选择:使用

where rexp_like(expr, ''') or (expr is null) 
一个选择:使用

where rexp_like(expr, ''') or (expr is null) 

我不认为您可以直接这样做,但您可以使用
nvl
使空值显示为空白字符串或字符串“null”

SELECT 1
  FROM DUAL
 WHERE REGEXP_LIKE(NVL(value, 'NULL'), '^([1-5]{5})|NULL$');

我不认为您可以直接这样做,但您可以使用
nvl
使空值显示为空白字符串或字符串“null”

SELECT 1
  FROM DUAL
 WHERE REGEXP_LIKE(NVL(value, 'NULL'), '^([1-5]{5})|NULL$');
以下是我的解决方案: REXEXP_-LIKE(NVL(列“*”),“&colNameQuery”)

然后,用户将使用“*”作为null和其他所有内容的查询参数。

以下是我的解决方案: REXEXP_-LIKE(NVL(列“*”),“&colNameQuery”)


然后用户将使用“*”作为空值和其他所有内容的查询参数。

+1,此解决方案不依赖任何魔法值。。。一旦语法被纠正。。。REGEXP_LIKE(expr,'^([1-5]{5})$)具有讽刺意味。。。我的语法更正引入了语法错误…:(嗯,我实际上是在寻找一个正则表达式而不是一个附加谓词。Codebender有一个满足该标准的解决方案。是的,Codebender的解决方案很好-但它使用了一个附加的函数调用而不是一个附加的谓词。(请注意,这不是一个问题,只是说)“\s”也可用于匹配空字符,仅供参考。其中regexp_like(nvl(expr.),“abc |\s');+1,此解决方案不依赖任何魔法值…一旦语法被更正…regexp_like(expr,”^([1-5]{5})$)具有讽刺意味…我的语法更正引入了语法错误…:(嗯,我实际上是在寻找一个正则表达式而不是一个附加谓词。Codebender有一个满足该标准的解决方案。是的,Codebender的解决方案很好-但它使用了一个附加的函数调用而不是一个附加的谓词。(请注意,这不是一个问题,只是说)“\s”也可用于匹配空字符,仅供参考;