今天有开发人员问我,需要取出下面字符串 + 号之前的字符串。
原字符串:”[爱情狂人]性感大片+w(160)h(128)”
目标取出:“[爱情狂人]性感大片” ,即 + 号之前的字符串。
当然最先想到的是可以先找出 + 号的位置,然后通过 substring 函数来取,但这方法不太灵活,于是想到使用正责表达式,应该可以实现。
创建测试表
1 |
create table test_44 (id integer, name varchar(64)); |
使用正责表达式检索
尝试使用正责表达式检索,如下:
1 |
select substring(name from '(.*)+') from test_44 where id=1; |
备注:由于 + 号是量词符合,检索不出,需要加上逃逸字符。
使用逃逸字符检索
1 |
select substring(name from E'(.*)+') from test_44 where id=1; |
备注:使用逃逸字符号,检索成功。
使用 Position 函数检索
1 |
skytf=> select substring(name from 1 for position ('+' in name ) -1 ) from test_44 where id=1; |
备注:些方法先通过 position 函数找出 + 号的位置,然后再通过 substring 取出,这种方法用得比较多,特别是在 Oracle 环境下。
总结
关于正责表达式的逃逸还有很多情况,也很复杂,这里不一一举例,有兴趣的朋友可以自己实验下。
原创文章,作者:1402239773,如若转载,请注明出处:https://blog.ytso.com/236416.html