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

解读047关于正则表达式'[^Ale|ax.r$]'

2014-08-24 09:12 288 查看

92. Evaluate the following expression using meta. character for regular expression:

'[^Ale|ax.r$]'

Which two matches would be returned by this expression? (Choose two.)

A. Alex

B. Alax

C. Alxer

D. Alaxendar

E. Alexender

Answer: DE
首先看些Oracle正则表达式语法,正则表达式是在10g才添加进来的,其匹配字符、量词字符、匹配选项、相关函数如下:

匹配字符:

字符

功能

^

标记行的开始

$

标记行的结束

= =

匹配字符族,如:[=a=] 可匹配字符a、â、ã、ä、å等

.

匹配任何字符(除了NULL)

[:alnum:]

匹配任何字母和数字

[:alpha:]

匹配任何字母

[:blank:]

匹配空格

[:cntrl:]

匹配任何控制字符(在ASCII码表中不可打印的字符,如ESC键)

[:digit:]

任何数字

[:graph:]

任何 标点符号、大小写字母以及数字

[:lower:]

任何小写字母

[:print:]

任何可打印的字符

[:punct:]

任何标点符号,如,.+-=等

[:space:]

任何空白字符,如回车、换行、制表等

[:upper:]

任何大写字母

[:xdigit:]

任何十六进制数字,即0-9A-F

|

分隔符

()

子表达式,可作为量词或向后引用的前段

[char]

匹配括号中的任何字符,[^char]表示除开括号中字符后的任何字符

量词字符:

字符

功能

*

匹配0次或多次

?

匹配0次或1次

+

匹配1次或多次

{m}

匹配m次

{m,}

匹配至少m次

{m,n}

匹配至少m次,最多n次

\n

引用第n个匹配

匹配选项:

字符

功能

c

匹配时区分大小写

i

匹配时不区分大小写

m

源字符串为多行匹配

n

.可匹配任何换行符

函数:

REGEXP_LIKE 是LIKE语句的正则表达式版本

语法:REGEXP_LIKE(源字符串, 匹配表达式[,匹配选项])
REGEXP_INSTR 返回源字符串中首次匹配正则表达式的起始位置

语法:REGEXP_INSTR(srcstr, pattern [, position [, occurrence[, return_option [, match_option]]]])

      srcstr:源字符串

      pattern:正则表达式

      position:搜索开始位置

      occurrence:返回第几个匹配项

      return_option:返回选项,0表示开始位置,1表示返回匹配的结束位置

      match_option:匹配选项
REGEXP_SUBSTR 返回源串中匹配正则表达式的子字符串

语法:SUBSTR(srcstr, pattern [, position [, occurrence [, match_option]]])

      srcstr:源字符串

      pattern:正则表达式

      position:搜索的开始位置

      occurrence:返回第几个匹配的字符串

      match_option:匹配选项
REGEXP_REPLACE 用执行字符串替换源文本中与正则表达式匹配的字符串

语法:REGEXP_REPLACE(srcstr, pattern [,replacestr [, position[, occurrence [, match_option]]]])

      srcstr:源字符串

      pattern:正则表达式

      replacestr:新的字符串

      position:搜索起始位置

      occurrence:第几个匹配项

      match_option:匹配选项
题目的意思是哪两个选项能和'[^Ale|ax.r$]'匹配

'[^Ale|ax.r$]'中^表示只匹配不在集合{'A','l','e','|','a','x','.','r','$'}中的字符, 此处的'|'、'.'、'$'只是表示普通的字符,而非匹配符

select regexp_instr('Alex','[^Ale|ax.r$]')      from dual;

REGEXP_INSTR('ALEX','[^ALE|AX.R$]')

-----------------------------------

0

select regexp_instr('Alax','[^Ale|ax.r$]')      from dual;

REGEXP_INSTR('ALAX','[^ALE|AX.R$]')

-----------------------------------

0

select regexp_instr('Alxer','[^Ale|ax.r$]')     from dual;

REGEXP_INSTR('ALXER','[^ALE|AX.R$]')

------------------------------------

0

select regexp_instr('Alaxendar','[^Ale|ax.r$]') from dual;

REGEXP_INSTR('ALAXENDAR','[^ALE|AX.R$]')

----------------------------------------

6

select regexp_instr('Alexender','[^Ale|ax.r$]') from dual;

REGEXP_INSTR('ALEXENDER','[^ALE|AX.R$]')

----------------------------------------

6

因此可见答案是DE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle sql