首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Oracle中regexp_like的匹配模式,以有条件地包含一组字符

Oracle中regexp_like的匹配模式,以有条件地包含一组字符
EN

Stack Overflow用户
提问于 2019-05-21 21:20:31
回答 1查看 46关注 0票数 0

我试图查找有关在Oracle中使用regexp_like的匹配模式的好文档。我已经找到了一些,并遵循了他们的说明,但看起来我遗漏了什么,或者说明不全面。让我们看一下这个例子:

代码语言:javascript
复制
SELECT * FROM
(
 SELECT 'ABC' T FROM DUAL
 UNION
 SELECT 'WZY' T FROM DUAL
 UNION
 SELECT 'WZY_' T FROM DUAL
 UNION
 SELECT 'WZYEFG' T FROM DUAL
 UNION
 SELECT 'WZY_EFG' T FROM DUAL
 ) C
 WHERE regexp_like(T, '(^WZY)+[_]{0,1}+[A-Z]{0,6}')

我期望收到的是WZY和WZY_EFG。但我得到的是:

我想要的是"_“可以存在也可以不存在,但如果第一组后面有字符,则它必须只出现一次。

有没有一种干净利落的方法呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-22 01:27:38

使用子表达式分组以确保 _ 字符仅与大写字母字符一起显示

是的,您的模式不能满足您所需的条件逻辑(仅当后面跟着大写字母字符时才能看到_ )。

将带有大写字母字符列表的_字符放入子表达式分组中会强制执行此逻辑。

最后,放置行尾锚点来解决零匹配的情况。

代码语言:javascript
复制
SCOTT@DB>SELECT                                         
  2      *                                                  
  3  FROM                                                   
  4      (                                                  
  5          SELECT 'ABC' t FROM dual                       
  6          UNION ALL                                      
  7          SELECT 'WZY' t FROM dual                       
  8          UNION ALL                                      
  9          SELECT 'WZY_' t FROM dual                      
 10          UNION ALL                                      
 11          SELECT 'WZYEFG' t FROM dual                    
 12          UNION ALL                                      
 13          SELECT 'WZY_EFG' t FROM dual                   
 14      ) c                                                
 15  WHERE                                                  
 16      REGEXP_LIKE ( t, '^(WZY)+([_][A-Z]{1,6}){0,1}$' );  
         T                                                  
__________                                                  
WZY                                                         
WZY_EFG                                                     
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56239251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档