首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle替换负前瞻性

Oracle替换负前瞻性
EN

Stack Overflow用户
提问于 2013-07-29 11:18:44
回答 2查看 2K关注 0票数 2

我正在写一些regex +查询来匹配美国的电话号码。从regex的角度验证下面的负展望,但由于不支持负查找,因此在Oracle中不起作用。有人能帮我修改查询以便在Oracle中工作吗?

代码语言:javascript
运行
复制
select 'match' from dual WHERE REGEXP_LIKE('16665555555', '^1?(?!911)[2-9][0-9]{9}$');

它不返回与甲骨文中任何数字的匹配。

谢谢你,安迪

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-29 11:30:02

代码语言:javascript
运行
复制
WHERE REGEXP_LIKE(phone, '^1?[2-9]\d{9}$') and not REGEXP_LIKE(phone, '^1?911')
票数 5
EN

Stack Overflow用户

发布于 2018-07-24 21:57:04

我认为接受的答案是最好和最清晰的方式来做到这一点。但仅供参考,这种情况下的另一种选择是将您想要的前三个字符(在可选的“1”之后)的限制结合起来,并使用替换来覆盖所有可能允许的情况。

在这种情况下,我们可以涵盖前三个字符(可选“1”之后)的所有可能允许的情况,有三种可能性:

  1. 字符匹配"2-9{2}“第一个字符不是a 9。这种情况可以写成:"2-8{2}”。
  2. 字符匹配"2-9{2}“第一个字符 9,但第二个字符不是 1。
  3. 字符匹配"2-9{2}“第一个字符9第二个字符 1,但是第三个字符不是e 225 1。

把这一切结合在一起,我们得到:

代码语言:javascript
运行
复制
select 'match' from dual WHERE REGEXP_LIKE('9115555555', '^1?([2-8][0-9]{2}|9[02-9][0-9]|91[02-9])[2-9][0-9]{6}$');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17922661

复制
相关文章

相似问题

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