Oracle中正则表达式如何匹配汉字

[复制链接]
查看11 | 回复9 | 2016-1-6 14:01:09 | 显示全部楼层 |阅读模式
数据情况:
荔城街荔城碧桂园云林水岸109\113\119\123\131\139号
荔城街荔城碧桂园云林水岸191\230号
荔城街荔城碧桂园云林水岸96\98\116\118号
荔城街民乐路18号汇港豪庭(会所\居委会)
荔城街御景路59号锦绣御景苑御景一街1号2栋\3栋
.....
类似这样的,现在想用正则表达式把前三条那样的数据过滤出来。
正则表达式的思路是"一个或多个汉字 +一个或多个数字和\+ 号 " 这样的形式来定义,
数据库的字符集是ZHS16GBK,请问正则表达式中如何匹配汉字?

回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
本帖最后由 visual2006 于 2012-2-15 21:49 编辑
仔细看了你的数据,检查‘digit\digit'不就行了吗?


回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
visual2006 发表于 2012-2-15 21:49
仔细看了你的数据,检查‘digit\digit'不就行了吗?

嗯,我猜测他的业务需求简化后也是你写的这样


回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
visual2006 发表于 2012-2-15 21:49
仔细看了你的数据,检查‘digit\digit'不就行了吗?

那个‘荔城街荔城碧桂园云林水岸96\98\116\118号’这样的地址,我需要找出类似的,但前面的汉字和后面的‘号’(有的数据最后一个字是‘栋’,‘幢’或‘座’),能给详细给说说不,最好给个例子。Oracle才学不多久

回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
SQL> with tmp_a as
2(select '荔城街荔城碧桂园云林水岸109\113\119\123\131\139号' col from dual
3 union all
4 select '荔城街荔城碧桂园云林水岸191\230号' from dual
5 union all
6 select '荔城街荔城碧桂园云林水岸96\98\116\118号' from dual
7 union all
8 select '荔城街民乐路18号汇港豪庭(会所\居委会)' from dual
9 union all
10 select '荔城街御景路59号锦绣御景苑御景一街1号2栋\3栋' from dual)
11select *
12from tmp_a
13where regexp_instr(col,'[\][[:digit:]]')>0
14/

COL
-------------------------------------------------
荔城街荔城碧桂园云林水岸109\113\119\123\131\139号
荔城街荔城碧桂园云林水岸191\230号
荔城街荔城碧桂园云林水岸96\98\116\118号
荔城街御景路59号锦绣御景苑御景一街1号2栋\3栋
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
visual2006 发表于 2012-2-16 09:45
SQL> with tmp_a as
2(select '荔城街荔城碧桂园云林水岸109\113\119\123\131\139号' col from dual
...

首先谢谢你的回答,其次,我是想找出类似前三条那样的记录,后两条都要过滤掉的。因为后面我需要用SQL或程序对这个地址拆分。
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
shisanshao2000 发表于 2012-2-20 10:30
首先谢谢你的回答,其次,我是想找出类似前三条那样的记录,后两条都要过滤掉的。因为后面我需要用SQL或程 ...

LZ是想找出‘数字\数字’形式的所有记录?
with tmp_a as
(select '荔城街荔城碧桂园云林水岸109\113\119\123\131\139号' col from dual
union all
select '荔城街荔城碧桂园云林水岸191\230号' from dual
union all
select '荔城街荔城碧桂园云林水岸96\98\116\118号' from dual
union all
select '荔城街民乐路18号汇港豪庭(会所\居委会)' from dual
union all
select '荔城街御景路59号锦绣御景苑御景一街1号2栋\3栋' from dual)
select *
from tmp_a
where regexp_like(col,'[[:digit:]][\][[:digit:]]')
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
visual2006 发表于 2012-2-20 10:44
LZ是想找出‘数字\数字’形式的所有记录?
with tmp_a as
(select '荔城街荔城碧桂园云林水岸109\113\1 ...

你这个能过滤部分,但是还有这样的情况不能过滤:
荔城街百花路力源豪苑北一巷17、21、23号北二巷25、27、33号
荔城街百花路力源豪苑北二巷18、20、22、26、28号;南三巷32、36号
新塘镇盈展路5号、新塘镇汇太东路233号13、14幢
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
过滤条件里加上‘、’就OK了
where regexp_like(col,'[[:digit:]][\、][[:digit:]]')
回复

使用道具 举报

千问 | 2016-1-6 14:01:09 | 显示全部楼层
visual2006 发表于 2012-2-20 11:24
过滤条件里加上‘、’就OK了
where regexp_like(col,'[[:digit:]][\、][[:digit:]]')

我不是那个意思,其实那个顿号和反斜杠是我自己替换的,我的意思是这样的地址数据不合我要的格式。我想要的格式是
荔城街百花路力源豪苑北一巷17、21、23号

荔城街百花路力源豪苑北一巷17、21、23号北二巷25、27、33号
后边还有北二巷这样的字眼,我想把这样的地址数据也过滤掉
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行