您的位置:首页 > 数据库 > Oracle

oracle中的正则表达式一题

2013-11-07 09:43 155 查看
108. View the Exhibit and examine the details for the CATEGORIES_TAB table.

Evaluate the following incomplete SQL statement:

SELECT category_name,category_description

FROM categories_tab

You want to display only the rows that have 'harddisks' as part of the string in the

CATEGORY_DESCRIPTION column.

Which two WHERE clause options can give you the desired result? (Choose two.)
A. WHERE REGEXP_LIKE (category_description, 'hard+.s');

B. WHERE REGEXP_LIKE (category_description, '^H|hard+.s');

C. WHERE REGEXP_LIKE (category_description, '^H|hard+.s$');

D. WHERE REGEXP_LIKE (category_description, '[^H|hard+.s]');

REGEXP_LIKE :与Oracle SQL 函数LIKE的功能相似.

POSIX 正则表达式简介
由标准的元字符(metacharacters)所构成:

'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。
'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。
'.' 匹配除换行符之外的任何单字符。
'?' 匹配前面的子表达式零次或一次。
'+' 匹配前面的子表达式一次或多次。
'*' 匹配前面的子表达式零次或多次。
'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。
'( )' 标记一个子表达式的开始和结束位置。
'[]' 标记一个中括号表达式。
'{m,n}' 一个精确地出现次数范围,m=<出现次数<=n,'{m}'表示出现m次,'{m,}'表示至少出现m次。
\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。

字符簇:
[[:alpha:]] 任何字母。
[[:digit:]] 任何数字。
[[:alnum:]] 任何字母和数字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大写字母。
[[:lower:]] 任何小写字母。
[[:punct:]] 任何标点符号。
[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。

根据以上基础知识,分析四个选项匹配的结果:
A. 'hard+.s'能够匹配harddis,其中表达式的+号代表前一个d的重复,“.”可以代表d和s之间的“i”
B. '^H|hard+.s'是比A选项多了一个可选,也就是匹配行首以大写的h开头的字符串,但因为可选项的另一部分跟A选项完全相同,所以也能匹配A选项的匹配结果。
其实看到这里就不用往下看了,因为两个正确答案就是AB。
C的表达式是'^H|hard+.s$',那个$代表字符串的尾部,也就是说s后面应该没有字符了,显然跟harddisk这个单词不相符。
D的表达式是'[^H|hard+.s]',中括号中的表达式只能匹配其中一个字符,也就是匹配“H”“h”“a”“r”“d”等的任意一个字符,但是请注意中括号的开始使用了“^”符号,意思是反选,中括号内能匹配的字符反而是不想要的,对于“harddisk”这个字符串,只有“i”和“k”是符合匹配条件的,显然D选项更不靠谱。

说了这么多,希望同学们能明白我在说什么:)

oracle视频教程请关注:http://down.51cto.com/4202939/up
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息