正则表达式问题。

chifan1100 2016-07-19 03:33:56
又来麻烦大家了
select 'aaa,bbb,ccc,ddd,eee,fff' from dual
union all
select 'ddd,qqq,12,3333,42687,opqe' from dual


怎么得到倒数第二段和倒数第三段呢?
...全文
205 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chifan1100 2016-07-26
  • 打赏
  • 举报
回复
引用 5 楼 ghx287524027 的回复:

with t3 as (
select 'aaa,bbb,ccc,ddd,eee,fff' str from dual 
union all
select 'ddd,qqq,12,3333,42687,opqe' str from dual)
第一种:
select rtrim(regexp_replace(str,'([^,]+,){3}(([^,]+,){2})([^,]+)','\2'),',') 
 from t3
第二种:
select regexp_replace(str,'([^,]+,){3}([^,]+,)([^,]+),([^,]+)','\2\3') 
 from t3
不明白的私聊我qq 212646490
好的,多谢指点。
ghx287524027 2016-07-20
  • 打赏
  • 举报
回复

with t3 as (
select 'aaa,bbb,ccc,ddd,eee,fff' str from dual 
union all
select 'ddd,qqq,12,3333,42687,opqe' str from dual)
第一种:
select rtrim(regexp_replace(str,'([^,]+,){3}(([^,]+,){2})([^,]+)','\2'),',') 
 from t3
第二种:
select regexp_replace(str,'([^,]+,){3}([^,]+,)([^,]+),([^,]+)','\2\3') 
 from t3
不明白的私聊我qq 212646490
js14982 2016-07-19
  • 打赏
  • 举报
回复
\ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。 ^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。 $ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。 * 匹配前面的子表达式任意次。例如,zo*能匹配“z”,也能匹配“zo”以及“zoo”。 .点 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。 [xyz] 字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。 {i} {i,j} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字
chifan1100 2016-07-19
  • 打赏
  • 举报
回复
引用 1 楼 js14982 的回复:
当然这个是正数。你要反数的话,可以先算出逗号的个数,然后用减法算出是第几个逗号
引用 2 楼 zs_jl_bh 的回复:
两位大神,能简单的解释一下吧,本人小白。 我加到 100 吧
zs_jl_bh 2016-07-19
  • 打赏
  • 举报
回复
with t as ( select 'aaa,bbb,ccc,ddd,eee,fff' xx from dual union all select 'ddd,qqq,12,3333,42687,opqe' from dual) select ltrim(regexp_replace(xx,'(.*)((,[^,]+){2})(,[^,]+)$','\2'),',') from t
js14982 2016-07-19
  • 打赏
  • 举报
回复

with tt as (
select 'aaa,bbb,ccc,ddd,eee,fff' a from dual 
union all
select 'ddd,qqq,12,3333,42687,opqe' from dual)
select regexp_substr(a,'[^,]+',3,4) from tt;
当然这个是正数。你要反数的话,可以先算出逗号的个数,然后用减法算出是第几个逗号

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧