注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

PostgreSQL 中文网

 
 
 

日志

 
 

正责表达式量词符号的逃逸  

2011-07-27 14:31:00|  分类: Postgres基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

   
   
      今天有开发人员问我,需要取出下面字符串 + 号之前的字符串。

原字符串:"[爱情狂人]性感大片+w(160)h(128)"
目标取出: “[爱情狂人]性感大片” ,即 + 号之前的字符串。

     当然最先想到的是可以先找出 + 号的位置,然后通过 substring 函数来取,但这方法不太灵活,
于是想到使用正责表达式,应该可以实现。
 

--1 创建测试表,并插入数据
skytf=> create table test_44 (id integer, name varchar(64));
CREATE TABLE

skytf=> insert into test_44 values (1,'[爱情狂人]性感大片+w(160)h(128)');
INSERT 0 1

skytf=> insert into test_44 values (2,'[爱情狂人]性感大片?w(160)h(128)');
INSERT 0 1

skytf=> select * from test_44;
 id |              name              
----+---------------------------------
  1 | [爱情狂人]性感大片+w(160)h(128)
  2 | [爱情狂人]性感大片?w(160)h(128)
(2 rows)


--2 尝试使用正责表达式
skytf=> select substring(name from '(.*)+') from test_44 where id=1;
 substring
-----------
 
(1 row)

  备注: 由于 + 号是量词符合,检索不出,需要加上逃逸字符。
 
 
--3 使用逃逸字符
skytf=> select substring(name from E'(.*)\\+') from test_44 where id=1;
     substring     
--------------------
 [爱情狂人]性感大片
(1 row)

skytf=> select substring(name from E'(.*)\\?') from test_44 where id=2;
     substring     
--------------------
 [爱情狂人]性感大片
(1 row)

  备注:使用逃逸字符号,检索成功。
 

--4 使用位置法
skytf=> select substring(name from 1 for position ('+' in name ) -1 ) from test_44 where id=1;
     substring     
--------------------
 [爱情狂人]性感大片
(1 row)

   备注:些方法先通过 position 函数找出 + 号的位置,然后再通过 substring 取出,这种方法
             用得比较多,特别是在 Oracle  环境下。
  
  
--5 总结

    关于正责表达式的逃逸还有很多情况,也很复杂,这里不一一举例,有兴趣的朋友可以自己实验下。  
   

  评论这张
 
阅读(25724)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016