oracle的regexp_substr问题

有个oracle的正则函数求指点

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i',1)
"REGEXP_SUBSTR" FROM DUAL;
这个是返回123,没有疑问
SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 2, 'i',1)
"REGEXP_SUBSTR" FROM DUAL;
这个返回null 奇怪了!!!在这里第4个参数和第6个参数有什么区别
我查看oracle的官方文档,显示:

QQ图片20150702102016.jpg


这里的occurrence跟regexp_replace的occurrence一样啊,但是为什么regexp_replace的却说的是第几个分组,但是regexp_substr说的虽然也是第几个分组,但是却取不到值

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i',3)
"REGEXP_SUBSTR" FROM DUAL;
返回56
SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i',4)
"REGEXP_SUBSTR" FROM DUAL;
返回78

求专家告诉我一下,这个是为什么,这第6个参数和第4个参数的区别是什么?
参与12

6同行回答

静以致远静以致远数据库运维工程师汇通天下
occurrence指的是字符串中出现第n组的匹配结果给你看看就明白了SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 1, 'i') FROM DUAL;结果:12345678   该结果为第一个1234567890中的12345678SELECT REGEXP_SUBSTR('12345678901234567890',...显示全部
occurrence指的是字符串中出现第n组的匹配结果
给你看看就明白了
SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 1, 'i')
FROM DUAL;
结果:12345678   该结果为第一个1234567890中的12345678
SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 2, 'i')
FROM DUAL;
结果:12345678   该结果是第二个1234567890中的12345678  也就是说第二个匹配到的结果
SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 3, 'i')
FROM DUAL;
结果:NULL      

另外你说的第六个参数,指的是正则表达式中的分组
比如(123)(4(56)(78))
第一组是(123)
第二组是(4(56)(78))
第三组是(56)
第四组是(78)
SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 1, 'i',1) FROM DUAL;
123
SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 1, 'i',2) FROM DUAL;
45678
SELECT REGEXP_SUBSTR('12345678901234567890', '(123)(4(56)(78))', 1, 1, 'i',3) FROM DUAL;
56

专家也是人,专家也有工作~  没注意遗留问题,见谅啊收起
互联网服务 · 2015-08-19
浏览1132
tongge01uuutongge01uuu软件开发工程师XXX
菜鸟专家,这么久都没解释出来。。。显示全部
菜鸟专家,这么久都没解释出来。。。收起
软件开发 · 2015-08-18
浏览1076
tongge01uuutongge01uuu软件开发工程师XXX
您测试一下regexp_replace的occurrence 参数,跟regexp_substr完全不同,我发现regexp_replace的occurrence 和regexp_substr的subexpr相似...显示全部
您测试一下regexp_replace的occurrence 参数,跟regexp_substr完全不同,我发现regexp_replace的occurrence 和regexp_substr的subexpr相似...收起
软件开发 · 2015-07-02
浏览1123
tongge01uuutongge01uuu软件开发工程师XXX
这样的回答不能令我满意。。这个答案在百度可以查到,但是其实是有6个参数的,百度能搜到的只有5个参数。。。显示全部
这样的回答不能令我满意。。
这个答案在百度可以查到,但是其实是有6个参数的,百度能搜到的只有5个参数。。。收起
软件开发 · 2015-07-02
浏览1093
静以致远静以致远数据库运维工程师汇通天下
REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr     :需要进行正则处理的字符串__pattern    :进行匹配的正则表达式__position   :起始位置,从第几个字符开始正则表...显示全部
REGEXP_SUBSTR函数格式如下:
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr     :需要进行正则处理的字符串
__pattern    :进行匹配的正则表达式
__position   :起始位置,从第几个字符开始正则表达式匹配(默认为1)
__occurrence :标识第几个匹配组,默认为1
__modifier   :模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)收起
互联网服务 · 2015-07-02
浏览1036
tongge01uuutongge01uuu软件开发工程师XXX
regexp_substr的官方地址:http://docs.oracle.com/cd/E11882 ... s150.htm#SQLRF06303regexp_replace的官方地址:http://docs.oracle.com/cd/E11882 ... s149.htm#SQLRF06302显示全部
软件开发 · 2015-07-02
浏览1131

提问者

tongge01uuu
软件开发工程师XXX

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-07-02
  • 关注会员:5 人
  • 问题浏览:3984
  • 最近回答:2015-08-19
  • X社区推广