见贤思小齐,知足常乐呵

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1。regexp_extract

语法:    regexp_extract(string subject,  string pattern,  int index)

返回值: string

说明:  将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。

第一参数:   要处理的字段

第二参数:    需要匹配的正则表达式

第三个参数:

  • 0是显示与之匹配的整个字符串
  • 1 是显示第一个括号里面的
  • 2 是显示第二个括号里面的字段...

 

注意,在有些情况下要使用转义字符(双斜杠了‘\\’)。

举例:

select 
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','x=([0-9]+)([a-z]+)',0),  -- x=18abc
regexp_extract('x=a3&x=18abc&x=2&y=3&x=4','^x=([a-z]+)([0-9]+)',0), -- x=a3

regexp_extract('https://detail.tmall.com/item.htm?spm=608.7065813.ne.1.Ni3rsN&id=522228774076&tracelog=fromnonactive','id=([0-9]+)',0),    -- id=522228774076
regexp_extract('https://detail.tmall.com/item.htm?spm=608.7065813.ne.1.Ni3rsN&id=522228774076&tracelog=fromnonactive','id=([0-9]+)',1),    -- 522228774076

regexp_extract('http://a.m.taobao.com/i41915173660.htm','i([0-9]+)',0),            -- i41915173660
regexp_extract('http://a.m.taobao.com/i41915173660.htm','i([0-9]+)',1)             -- 41915173660

from test.dual;

 

正则匹配字符解释:

  • ^ 表示开头
  • $ 表示结尾
  • . 表示任意字符
  • * 表示任意多个

2。手机号清洗:

 regexp_replace(mobile,'[^0-9]','')    regexp '1[0-9]{10}'  返回true,则为好的手机号。

 

3。其他两个函数split 和 parse_url

也可以做简单的url 关键字提取, 如下

select 
   'xinli.ewt360.com/Psychology/Search?keyword=abc?语文数学123' url,
   split(split(lower('xinli.ewt360.com/Psychology/Search?keyword=abc?语文数学123/from'),'keyword=')[1],'/')[0]                              split1,  -- 结果: abc?语文数学123
   split(parse_url(concat('http://',lower('xinli.ewt360.com/Psychology/Search?keyword=abc?语文数学123/from')), 'QUERY','keyword'),'/')[0] parse_url1,
   
   regexp_extract(lower('xinli.ewt360.com/Psychology/Search?keyword=abc?语文数学123'),'keyword=(.+)',1),           -- 还未找到办法
   regexp_extract(lower('xinli.ewt360.com/Psychology/Search?keyword=语文数学'),'keyword=(^[\\u4e00-\\u9fa5]$)+')   -- 中文匹配,还未验证

 

4.  https://blog.csdn.net/lsr40/article/details/82223923  

 

posted on 2016-02-01 15:15  Suckseedeva  阅读(90541)  评论(0编辑  收藏  举报