问几个正则表达式的问题

wh62592855 2010-03-21 04:23:38
刚才在做正则表达式例子的时候有几条语句看不太懂 请大家帮忙解释一下
SQL> select * from test;  --test表中内容如下

MC
------------------------------------------------------------
112233445566778899
22113344 5566778899
33112244 5566778899
44112233 5566 778899
5511 2233 4466778899
661122334455778899
771122334455668899
881122334455667799
991122334455667788
aabbccddee
bbaaaccddee

MC
------------------------------------------------------------
ccabbddee
ddaabbccee
eeaabbccdd
ab123
123xy
007ab
abcxy
The final test is is is how to find duplicate words.
aaaaaaaaaaaaaaa

已选择20行。
SQL> select * from test where regexp_like(mc,'^([a-z]+ ¦[0-9]+)$');
/*这里我觉得应该是表示所有小写字母或数字组合成的字符串 可为什么结果里只显示出了数字 而没有把纯小写字母的记录
显示出来呢?*/

MC
------------------------------------------------------------
112233445566778899
661122334455778899
771122334455668899
881122334455667799
991122334455667788
SQL> select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');
/*看书上写的^比|的优先级高 所以这里个人觉得是选出以小写字母开头的记录或数字记录 可从结果上来看好像理解不太对 …… 麻烦各位解释一下*/
MC
------------------------------------------------------------
112233445566778899
22113344 5566778899
33112244 5566778899
44112233 5566 778899
5511 2233 4466778899
661122334455778899
771122334455668899
881122334455667799
991122334455667788
ab123
123xy

MC
------------------------------------------------------------
007ab

已选择12行。

SQL> Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');
/*不是说[[:digit:]]叫做字符簇吗 这里怎么还可以把^插夹到两个[[中间的?*/
MC
------------------------------------------------------------
22113344 5566778899
33112244 5566778899
44112233 5566 778899
5511 2233 4466778899
aabbccddee
bbaaaccddee
ccabbddee
ddaabbccee
eeaabbccdd
ab123
123xy

MC
------------------------------------------------------------
007ab
abcxy
The final test is is is how to find duplicate words.
aaaaaaaaaaaaaaa

已选择15行。


估计另外几个函数也会碰上一些问题~呵呵 先把这个REGEXP_LIKE的问了再说吧
...全文
119 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyousor 2010-03-22
  • 打赏
  • 举报
回复
select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');
这条语句表示:
选择以小写字母开头的,紧接着是空格或者是数字的值
112233445566778899
22113344 5566778899
33112244 5566778899
44112233 5566 778899
5511 2233 4466778899
661122334455778899
771122334455668899
881122334455667799
991122334455667788
ab123
123xy
007ab
tangren 2010-03-22
  • 打赏
  • 举报
回复
来学习
wh62592855 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhangcunhua 的回复:]
select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');
这条语句表示:
选择以小写字母开头的,紧接着是空格或者是数字的值
112233445566778899
22113344 5566778899
33112244 5566778899
44112233 5566 778899
5511 2233 ……
[/Quote]
为什么以数字开头的也被选出来了呢?
wh62592855 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dzntree 的回复:]
首先,正则表达式里面不要含有多余的空格;

select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');
意思是以小写字母开头或包含数字的字符串;

[^[:digit:]] 表示要找出不包含数字的,这个解释不正确,^放到里面虽然不报错,但是结果混乱
[/Quote]你的意思是说codearts朋友解释的不太对?可是从我在6#的尝试结果看来 好像是正确的呀。。
wh62592855 2010-03-22
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhangcunhua 的回复:]
select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');
这条语句表示:
选择以小写字母开头的,紧接着是空格或者是数字的值
112233445566778899
22113344 5566778899
33112244 5566778899
44112233 5566 778899
5511 2233 ……
[/Quote]
可是从结果看来好像不太对啊……
dzntree 2010-03-22
  • 打赏
  • 举报
回复
首先,正则表达式里面不要含有多余的空格;

select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');
意思是以小写字母开头或包含数字的字符串;

[^[:digit:]] 表示要找出不包含数字的,这个解释不正确,^放到里面虽然不报错,但是结果混乱
wh62592855 2010-03-21
  • 打赏
  • 举报
回复
select * from test where regexp_like(mc,'^[[:lower:]] ¦[[:digit:]]');


那这条语句怎么解释呢?
wh62592855 2010-03-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 codearts 的回复:]
/*不是说[[:digit:]]叫做字符簇吗 这里怎么还可以把^插夹到两个[[中间的?*/

这里的^不是表示开头了,表示不包含(相当于not in)。

[^[:digit:]] 表示要找出不包含数字的
[/Quote]懂了 谢谢again 呵呵
SQL> select * from test
2 minus
3 Select mc FROM test Where REGEXP_LIKE(mc,'[^[:digit:]]');

MC
------------------------------------------------------------
112233445566778899
661122334455778899
771122334455668899
881122334455667799
991122334455667788
wh62592855 2010-03-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 codearts 的回复:]
SQL> select * from test where regexp_like(mc,'^([a-z]+ ¦[0-9]+)$');
/*这里我觉得应该是表示所有小写字母或数字组合成的字符串 可为什么结果里只显示出了数字 而没有把纯小写字母的记录
显示出来呢?*/

+ ¦[
* 看到没,多了一个空格
[/Quote]恩 谢谢 我试了一下是正确的
SQL> insert into test values('bbbbbbbbbbbbbbb ');

已创建 1 行。

SQL> commit;

提交完成。

SQL> select * from test where regexp_like(mc,'^([a-z]+ ¦[0-9]+)$');

MC
------------------------------------------------------------
112233445566778899
661122334455778899
771122334455668899
881122334455667799
991122334455667788
bbbbbbbbbbbbbbb

已选择6行。
codearts 2010-03-21
  • 打赏
  • 举报
回复
/*不是说[[:digit:]]叫做字符簇吗 这里怎么还可以把^插夹到两个[[中间的?*/

这里的^不是表示开头了,表示不包含(相当于not in)。

[^[:digit:]] 表示要找出不包含数字的
codearts 2010-03-21
  • 打赏
  • 举报
回复
SQL> select * from test where regexp_like(mc,'^([a-z]+ ¦[0-9]+)$');
/*这里我觉得应该是表示所有小写字母或数字组合成的字符串 可为什么结果里只显示出了数字 而没有把纯小写字母的记录
显示出来呢?*/

+ ¦[
* 看到没,多了一个空格
wh62592855 2010-03-21
  • 打赏
  • 举报
回复
恩 ^是代表一行的开始
那把这个^加到[[:digit:]]中算是什么意思呢?
字符簇[[:digit:]]不是应该作为完整的一体的吗?
ACMAIN_CHM 2010-03-21
  • 打赏
  • 举报
回复
/*不是说[[:digit:]]叫做字符簇吗 这里怎么还可以把^插夹到两个[[中间的?*/

^ 代表一行的开始

17,086

社区成员

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

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