4.1.4 正则表达式函数

前端之家收集整理的这篇文章主要介绍了4.1.4 正则表达式函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_502_1@http://book.51cto.com 2008-12-16 15:05 @H_502_1@史新元@H_502_1@北英@H_502_1@ @H_502_1@清华大学出版社@H_403_11@

@H_502_1@4.1.4@H_502_1@ @H_502_1@正则表达式函数@H_403_11@

@H_502_1@本节介绍正则表达式及相关的@H_502_1@Oracle@H_502_1@数据库函数。使用这些函数可以在字符串中搜索字符模式。例如,假设有下列年份:@H_403_11@

@H_502_1@1965
1968
1971
1970@H_403_11@

@H_502_1@如果希望获得@H_502_1@1965@H_502_1@年和@H_502_1@1968@H_502_1@年之间的年份@H_502_1@(@H_502_1@包括@H_502_1@1965@H_502_1@年和@H_502_1@1968@H_502_1@年@H_502_1@)@H_502_1@,就可以使用下面的正则表达式实现这种功能:@H_403_11@

@H_502_1@^196[5-8]$@H_403_11@

@H_502_1@正则表达式中包含许多元字符@H_502_1@(Metacharacter)@H_502_1@。在上面这个例子中,@H_502_1@^@H_502_1@、@H_502_1@[5-8]@H_502_1@以及@H_502_1@$@H_502_1@都是元字符。@H_502_1@^@H_502_1@可以匹配一个字符串的开头;@H_502_1@[5-8]@H_502_1@可以匹配介于@H_502_1@5~8@H_502_1@之间的数字;@H_502_1@$@H_502_1@可以匹配一个字符串的结尾。因此,@H_502_1@^196@H_502_1@可以匹配以@H_502_1@196@H_502_1@开头的字符串;@H_502_1@[5-8]$@H_502_1@可以匹配以@H_502_1@5@H_502_1@、@H_502_1@6@H_502_1@、@H_502_1@7@H_502_1@或@H_502_1@8@H_502_1@结尾的字符串。而@H_502_1@^196[5-8]$@H_502_1@就可以匹配@H_502_1@1965@H_502_1@、@H_502_1@1966@H_502_1@、@H_502_1@1967@H_502_1@和@H_502_1@1968@H_502_1@,这就是想要的结果。@H_403_11@

@H_502_1@在下面这个例子中,假设有如下字符串,其中引用了莎士比亚的《罗密欧与朱丽叶》中的一句台词:@H_403_11@

@H_502_1@But,soft! What light through yonder window breaks?@H_403_11@

@H_502_1@如果想查找子字符串@H_502_1@light@H_502_1@,可以对引用的字符串应用下面的正则表达式:@H_403_11@

@H_502_1@l[[:alpha:]]{4}@H_403_11@

@H_502_1@在这个例子中,@H_502_1@[[:alpha:]]@H_502_1@和@H_502_1@{4}@H_502_1@都是元字符。@H_502_1@[[:alpha:]]@H_502_1@可以匹配@H_502_1@A-Z@H_502_1@或@H_502_1@a-z@H_502_1@之间的字符;@H_502_1@{4}@H_502_1@表示前面的匹配模式可以重复@H_502_1@4@H_502_1@次。当@H_502_1@l@H_502_1@、@H_502_1@[[:alpha:]]@H_502_1@和@H_502_1@{4}@H_502_1@一起使用时,可以匹配以@H_502_1@ l @H_502_1@开头的@H_502_1@5@H_502_1@个字母组成的序列。因此,当对这个字符串应用正则表达式@H_502_1@ l[[:alpha:]]{4}@H_502_1@时,就可以匹配子字符串@H_502_1@light@H_502_1@。@H_403_11@

@H_502_1@表@H_502_1@4-7@H_502_1@列出了在正则表达式中可以使用的部分元字符,同时还给出了这些元字符的意思以及使用这些元字符的简单例子。@H_403_11@

@H_502_1@表@H_502_1@4-7 @H_502_1@正则表达式中的元字符@H_403_11@

@H_502_1@元@H_502_1@ @H_502_1@字@H_502_1@ @H_502_1@符@H_403_11@

@H_502_1@意@H_502_1@ @H_502_1@思@H_403_11@

@H_502_1@例@H_502_1@ @H_502_1@子@H_403_11@

@H_502_1@\ @H_403_11@

@H_502_1@说明要匹配的字符是一个特殊字符、常量或者反向引用。@H_502_1@(@H_502_1@反向引用重复上一次匹配。@H_502_1@) @H_403_11@

@H_502_1@\n @H_502_1@匹配换行符@H_403_11@

@H_502_1@\\ @H_502_1@匹配@H_502_1@ \ @H_403_11@

@H_502_1@\( @H_502_1@匹配@H_502_1@( @H_403_11@

@H_502_1@\) @H_502_1@匹配@H_502_1@)@H_403_11@

@H_502_1@^ @H_403_11@

@H_502_1@匹配字符串的开头位置@H_403_11@

@H_502_1@如果@H_502_1@A@H_502_1@是字符串中的第一个字符,@H_502_1@^A @H_502_1@匹配@H_502_1@A@H_403_11@

@H_502_1@$ @H_403_11@

@H_502_1@匹配字符串的末尾位置@H_403_11@

@H_502_1@如果@H_502_1@B@H_502_1@是字符串中的最后一个字符,@H_502_1@$B@H_502_1@匹配@H_502_1@B@H_403_11@

@H_502_1@* @H_403_11@

@H_502_1@匹配前面的字符@H_502_1@0@H_502_1@次或多次。@H_403_11@

@H_502_1@ba*rk @H_502_1@可以匹配@H_502_1@ brk@H_502_1@、@H_502_1@bark@H_502_1@、@H_502_1@baark@H_502_1@等等@H_403_11@

@H_502_1@+ @H_403_11@

@H_502_1@匹配前面的字符@H_502_1@1@H_502_1@次或多次。@H_403_11@

@H_502_1@ba+rk @H_502_1@可以匹配@H_502_1@bark@H_502_1@、@H_502_1@baark@H_502_1@等等,但是不能匹配@H_502_1@brk@H_403_11@

@H_502_1@? @H_403_11@

@H_502_1@匹配前面的字符@H_502_1@0@H_502_1@次或@H_502_1@1@H_502_1@次@H_403_11@

@H_502_1@ba?rk @H_502_1@只能匹配@H_502_1@brk@H_502_1@和@H_502_1@bark@H_403_11@

@H_502_1@{n} @H_403_11@

@H_502_1@匹配一个字符恰好@H_502_1@n@H_502_1@次,其中@H_502_1@n@H_502_1@是一个整数@H_403_11@

@H_502_1@hob{2}it @H_502_1@可以匹配@H_502_1@hobbit@H_403_11@

@H_502_1@
@H_403_11@

@H_502_1@@H_403_11@

@H_502_1@(@H_502_1@续表@H_502_1@) @H_403_11@

@H_502_1@元@H_502_1@ @H_502_1@字@H_502_1@ @H_502_1@符@H_403_11@

@H_502_1@意@H_502_1@ @H_502_1@思@H_403_11@

@H_502_1@例@H_502_1@ @H_502_1@子@H_403_11@

@H_502_1@{n,m} @H_403_11@

@H_502_1@匹配一个字符至少@H_502_1@n@H_502_1@次,最多@H_502_1@m@H_502_1@次,其中@H_502_1@n@H_502_1@和@H_502_1@m@H_502_1@都是整数@H_403_11@

@H_502_1@hob{2,3}it @H_502_1@只能匹配@H_502_1@hobbit@H_502_1@和@H_502_1@hobbbit@H_403_11@

@H_502_1@. @H_403_11@

@H_502_1@匹配除@H_502_1@null@H_502_1@之外的任意单个字符@H_403_11@

@H_502_1@hob.it @H_502_1@可以匹配@H_502_1@hobait@H_502_1@、@H_502_1@hobbit@H_502_1@等等@H_403_11@

@H_502_1@(pattern) @H_403_11@

@H_502_1@匹配指定模式的一个子表达式。可以使用子表达式构成复杂的正则表达式。在这种子表达式中,可以访问单次的匹配,称为捕获@H_502_1@(capture)@H_403_11@

@H_502_1@anatom(y|ies) @H_502_1@可以匹配@H_502_1@anatomy@H_502_1@和@H_502_1@ anatomies@H_403_11@

@H_502_1@x|y @H_403_11@

@H_502_1@匹配@H_502_1@x@H_502_1@或@H_502_1@y@H_502_1@,其中@H_502_1@x@H_502_1@和@H_502_1@y@H_502_1@是一个或多个字符@H_403_11@

@H_502_1@war|peace @H_502_1@可以匹配@H_502_1@ war @H_502_1@或@H_502_1@ peace@H_403_11@

@H_502_1@[abc] @H_403_11@

@H_502_1@匹配中括号内的任意一个字符@H_403_11@

@H_502_1@[ab]bc @H_502_1@可以匹配@H_502_1@ abc @H_502_1@和@H_502_1@ bbc@H_403_11@

@H_502_1@[a-z] @H_403_11@

@H_502_1@匹配指定范围内的任意一个字符@H_403_11@

@H_502_1@[a-c]bc @H_502_1@可以匹配@H_502_1@ abc@H_502_1@、@H_502_1@bbc@H_502_1@和@H_502_1@cbc@H_403_11@

@H_502_1@[: :] @H_403_11@

@H_502_1@指定一个字符类,可以匹配该类中的任何字符@H_403_11@

@H_502_1@[:alphanum:] @H_502_1@可以匹配字符@H_502_1@0-9@H_502_1@、@H_502_1@A-Z@H_502_1@和@H_502_1@a-z@H_403_11@

@H_502_1@[:alpha:] @H_502_1@可以匹配字符@H_502_1@A-Z@H_502_1@和@H_502_1@a-z@H_403_11@

@H_502_1@[:blank:] @H_502_1@可以匹配空格或@H_502_1@tab@H_502_1@键@H_403_11@

@H_502_1@[:digit:] @H_502_1@可以匹配数字@H_502_1@ 0-9@H_403_11@

@H_502_1@[:graph:] @H_502_1@可以匹配非空字符@H_403_11@

@H_502_1@[:lower:] @H_502_1@可以匹配小写字母@H_502_1@a-z@H_403_11@

@H_502_1@[:print:] @H_502_1@与@H_502_1@ [:graph:] @H_502_1@类似,不同之处在于@H_502_1@[:print:] @H_502_1@包括空格字符@H_403_11@

@H_502_1@[:punct:] @H_502_1@可以匹配标点符号@H_502_1@.@H_502_1@,@H_502_1@'''@H_502_1@等等@H_403_11@

@H_502_1@[:space:] @H_502_1@可以匹配所有的空白字符@H_403_11@

@H_502_1@[:upper:] @H_502_1@可以匹配所有的大写字母@H_502_1@A~Z@H_403_11@

@H_502_1@[:xdigit:] @H_502_1@可以匹配十六进制数字@H_502_1@ 0~9@H_502_1@、@H_502_1@A~F@H_502_1@和@H_502_1@a~f@H_403_11@

@H_502_1@[..] @H_403_11@

@H_502_1@匹配一个组合元素,例如多字符元素@H_403_11@

@H_502_1@无@H_403_11@

@H_502_1@[==] @H_403_11@

@H_502_1@指定等价类@H_403_11@

@H_502_1@无@H_403_11@

@H_502_1@\n @H_403_11@

@H_502_1@这是对前一次捕获的一个反向引用,其中@H_502_1@n@H_502_1@是一个正整数@H_403_11@

@H_502_1@(.)\1 @H_502_1@可以匹配两个连续相同的字符。@H_502_1@(.)@H_502_1@可以匹配除@H_502_1@null@H_502_1@之外的任何单个字符,而@H_502_1@ \1 @H_502_1@则重复上次匹配的内容,即再次匹配相同的字符,因此可以匹配两个连续相同的字符@H_403_11@

@H_502_1@Oracle Database 10g Release 2@H_502_1@新增加了很多类似于@H_502_1@Perl@H_502_1@的元字符,如表@H_502_1@4-8@H_502_1@所示。@H_403_11@

@H_502_1@表@H_502_1@4-8 @H_502_1@类似于@H_502_1@Perl@H_502_1@的元字符@H_403_11@

@H_502_1@元@H_502_1@ @H_502_1@字@H_502_1@ @H_502_1@符@H_403_11@

@H_502_1@含@H_502_1@ @H_502_1@义@H_403_11@

@H_502_1@\d@H_403_11@

@H_502_1@数字字符@H_403_11@

@H_502_1@\D@H_403_11@

@H_502_1@非数字字符@H_403_11@

@H_502_1@\w@H_403_11@

@H_502_1@字母字符@H_403_11@

@H_502_1@\W@H_403_11@

@H_502_1@非字母字符@H_403_11@

@H_502_1@\s@H_403_11@

@H_502_1@空白字符@H_403_11@

@H_502_1@\S@H_403_11@

@H_502_1@非空白字符@H_403_11@

@H_502_1@
@H_403_11@

@H_502_1@@H_403_11@

@H_502_1@(@H_502_1@续表@H_502_1@) @H_403_11@

@H_502_1@元@H_502_1@ @H_502_1@字@H_502_1@ @H_502_1@符@H_403_11@

@H_502_1@含@H_502_1@ @H_502_1@义@H_403_11@

@H_502_1@\A@H_403_11@

@H_502_1@只匹配字符串的开头位置@H_403_11@

@H_502_1@\Z@H_403_11@

@H_502_1@只匹配字符串的末尾位置或者字符串末尾的换行符之前的位置@H_403_11@

@H_502_1@*?@H_403_11@

@H_502_1@匹配前面的模式元素@H_502_1@0@H_502_1@次或多次@H_403_11@

@H_502_1@+?@H_403_11@

@H_502_1@匹配前面的模式元素@H_502_1@1@H_502_1@次或多次@H_403_11@

@H_502_1@??@H_403_11@

@H_502_1@匹配前面的模式元素@H_502_1@0@H_502_1@次或@H_502_1@1@H_502_1@次@H_403_11@

@H_502_1@{n}@H_403_11@

@H_502_1@匹配前面的模式元素恰好@H_502_1@n@H_502_1@次@H_403_11@

@H_502_1@{n,}@H_403_11@

@H_502_1@匹配前面的模式元素至少@H_502_1@n@H_502_1@次@H_403_11@

@H_502_1@{n,m}@H_403_11@

@H_502_1@匹配前面的模式元素至少@H_502_1@n@H_502_1@次,但不超过@H_502_1@m@H_502_1@次@H_403_11@

@H_502_1@表@H_502_1@4-9@H_502_1@列出了正则表达式函数。正则表达式函数是在@H_502_1@Oracle Database 10g@H_502_1@中新增加的,@H_502_1@ Oracle Database 11g@H_502_1@中又增加了一些条目,如下表所示。@H_403_11@

@H_502_1@表@H_502_1@4-9 @H_502_1@正则表达式函数@H_403_11@

@H_502_1@函@H_502_1@ @H_502_1@数@H_403_11@

@H_502_1@说@H_502_1@ @H_502_1@明@H_403_11@

@H_502_1@REGEXP_LIKE( x,pattern@H_403_11@

@H_502_1@[,match_option])@H_403_11@

@H_502_1@从@H_502_1@x@H_502_1@中搜索@H_502_1@pattern@H_502_1@参数中定义的正则表达式。可以使用@H_502_1@match_option@H_502_1@修改默认匹配选项,该参数可以被设置为:@H_403_11@

@H_502_1@• 'c'@H_502_1@,说明在匹配时区分大小写@H_502_1@(@H_502_1@默认选项@H_502_1@) @H_403_11@

@H_502_1@• 'I'@H_502_1@,说明在匹配时不区分大小写@H_403_11@

@H_502_1@• 'n'@H_502_1@,允许使用可以匹配任意字符的操作符@H_403_11@

@H_502_1@• 'm'@H_502_1@,将@H_502_1@x@H_502_1@作为一个包含多行的字符串@H_403_11@

@H_502_1@REGEXP_INSTR( x,start@H_403_11@

@H_502_1@[,occurrence@H_403_11@

@H_502_1@[,return_option@H_403_11@

@H_502_1@[,match_option@H_403_11@

@H_502_1@[,subexp_option]]]])@H_403_11@

@H_502_1@在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@,并返回@H_502_1@pattern@H_502_1@所在的位置。可以指定以下的可选参数:@H_403_11@

@H_502_1@• start @H_502_1@ 开始查找的位置。默认值是@H_502_1@1@H_502_1@,指@H_502_1@x@H_502_1@的第一个字符。@H_403_11@

@H_502_1@• occurrence @H_502_1@ 说明应该返回第几次出现@H_502_1@pattern@H_502_1@的位置。默认值是@H_502_1@1@H_502_1@,这意味着函数返回@H_502_1@pattern@H_502_1@第一次在@H_502_1@x@H_502_1@中出现的位置。@H_403_11@

@H_502_1@• return_option @H_502_1@ 说明应该返回什么整数。若该参数为@H_502_1@0@H_502_1@,则说明要返回的整数是@H_502_1@x@H_502_1@中的第一个字符的位置;若该参数为非@H_502_1@0@H_502_1@的整数,则说明要返回的整数为@H_502_1@x@H_502_1@中出现在@H_502_1@pattern@H_502_1@之后的字符的位置@H_403_11@

@H_502_1@• match_option @H_502_1@修改默认的匹配设置,其工作方式与@H_502_1@REGEXP_LIKEK()@H_502_1@中指定的方式相同。@H_403_11@

@H_502_1@• subexp_option@H_502_1@是@H_502_1@Oracle Database 11g@H_502_1@新增加的,其工作方式如下:对于具有子表达式的模式,@H_502_1@subexp_option@H_502_1@是@H_502_1@0~9@H_502_1@之间的一个非负数,指出@H_502_1@pattern@H_502_1@中的哪个子表达式是函数的目标。例如,考虑表达式@H_502_1@0123(((abc)(de)f)ghi)45(678)@H_502_1@,此表达式有@H_502_1@5@H_502_1@个子表达式,分别是:@H_502_1@"abcdefghi"@H_502_1@、@H_502_1@"abcdef"@H_502_1@、@H_502_1@"abc"@H_502_1@、@H_502_1@"de"@H_502_1@和@H_502_1@"678"@H_502_1@。@H_502_1@
@H_502_1@如果@H_502_1@subexp_option@H_502_1@是@H_502_1@0@H_502_1@,则返回@H_502_1@pattern@H_502_1@的位置。如果@H_502_1@pattern@H_502_1@没有正确的子表达式数字,则函数返回@H_502_1@0@H_502_1@。@H_502_1@subexp_option@H_502_1@为空值则返回空。@H_502_1@subexp_option@H_502_1@的默认值是@H_502_1@0@H_403_11@

@H_502_1@
@H_403_11@

@H_502_1@(@H_502_1@续表@H_502_1@) @H_403_11@

@H_502_1@函@H_502_1@ @H_502_1@数@H_403_11@

@H_502_1@说@H_502_1@ @H_502_1@明@H_403_11@

@H_502_1@REGEXP_REPLACE(x,replace_string@H_403_11@

@H_502_1@[,match_option]]]])@H_403_11@

@H_502_1@在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@,并将其替换为@H_502_1@replace_string@H_502_1@。其他选项的意思与@H_502_1@ REGEXP_INSTR()@H_502_1@函数的参数完全相同@H_403_11@

@H_502_1@REGEXP_SUBSTR( x,subexp_option]]]])@H_403_11@

@H_502_1@返回@H_502_1@x@H_502_1@中可以匹配@H_502_1@pattern@H_502_1@的一个子字符串,其开始位置由@H_502_1@start@H_502_1@指定。其他选项的意思与@H_502_1@ REGEXP_INSTR()@H_502_1@函数的参数完全相同。@H_502_1@Oracle Database 11g@H_502_1@新增加的@H_502_1@subexp_option@H_502_1@其工作方式与@H_502_1@REGEXP_INSTR()@H_502_1@函数中相同@H_403_11@

@H_502_1@REGEXP_COUNT( x,match_option]])@H_403_11@

@H_502_1@@H_403_11@

@H_502_1@这是@H_502_1@Oracle Database 11g@H_502_1@新增加的一个函数。在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@,并返回@H_502_1@pattern@H_502_1@在@H_502_1@x@H_502_1@中出现的次数。可以提供以下两个可选参数:@H_403_11@

@H_502_1@• start @H_502_1@ 开始查找的位置。默认值是@H_502_1@1@H_502_1@,指@H_502_1@x@H_502_1@的第一个字符。@H_403_11@

@H_502_1@• match_option @H_502_1@ 修改默认的匹配设置,其工作方式与@H_502_1@REGEXP_LIKE@H_502_1@K()@H_502_1@中相同@H_403_11@

@H_502_1@接下来的几节将会介绍更多有关正则表达式函数的知识。@H_403_11@

@H_502_1@第@H_502_1@5@H_502_1@章将通过更多的例子来展示如何使用@H_502_1@CAST()@H_502_1@转换日期、时间和时间间隔。第@H_502_1@13@H_502_1@章将展示如何使用@H_502_1@CAST()@H_502_1@来转换集合。@H_403_11@

@H_502_1@@H_403_11@

· @H_403_11@

@H_502_1@1. REGEXP_LIKE()@H_403_11@

@H_502_1@REGEXP_LIKE(x,pattern [,match_option])@H_502_1@用于在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@参数中定义的正则表达式,该函数还可以提供一个可选参数@H_502_1@match_option@H_502_1@,它可以设置为下面几个字符之一:@H_403_11@

@H_502_1@●'c'@H_502_1@,说明在匹配时区分大小写@H_502_1@(@H_502_1@默认选项@H_502_1@) @H_403_11@

@H_502_1@●'I'@H_502_1@,说明在匹配时不区分大小写@H_403_11@

@H_502_1@●'n'@H_502_1@,允许使用可以匹配任意字符的操作符@H_403_11@

@H_502_1@●'m'@H_502_1@,将@H_502_1@x @H_502_1@作为一个包含多行的字符串@H_403_11@

@H_502_1@下面这个查询使用@H_502_1@REGEXP_LIKE@H_502_1@函数检索生日在@H_502_1@1965@H_502_1@年到@H_502_1@1968@H_502_1@年之间的顾客:@H_403_11@

@H_502_1@SELECT customer_id,first_name,last_name,dob
FROM customers
WHERE REGEXP_LIKE(TO_CHAR(dob,'YYYY'),'^196[5-8]$');@H_403_11@

@H_502_1@CUSTOMER_ID FIRST_NAME LAST_NAME DOB
----------- ---------- ---------- ---------
1 John Brown 01-JAN-65
2 Cynthia Green 05-FEB-68 @H_403_11@

@H_502_1@下面这个查询检索名字以@H_502_1@J@H_502_1@或@H_502_1@j@H_502_1@开头的顾客。注意传递给@H_502_1@REGEXP_LIKE()@H_502_1@的正则表达式是@H_502_1@ ^j@H_502_1@,匹配选项是@H_502_1@i@H_502_1@,这说明不区分大小写,因此在本例中,@H_502_1@^j @H_502_1@可以匹配@H_502_1@J@H_502_1@或@H_502_1@j@H_502_1@:@H_403_11@

@H_502_1@SELECT customer_id,dob
FROM customers
WHERE REGEXP_LIKE(first_name,'^j','i');@H_403_11@

@H_502_1@CUSTOMER_ID FIRST_NAME LAST_NAME DOB
----------- ---------- ---------- ---------
1 John Brown 01-JAN-65 @H_403_11@

@H_502_1@2. REGEXP_INSTR()@H_403_11@

@H_502_1@REGEXP_INSTR(x,start [,occurrence [,return_option [,match_option]]]])@H_502_1@用于在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@;@H_502_1@REGEXP_INSTR()@H_502_1@返回@H_502_1@pattern@H_502_1@出现的位置。匹配位置从@H_502_1@1@H_502_1@开始。@H_403_11@

@H_502_1@下面这个查询使用@H_502_1@REGEXP_INSTR@H_502_1@函数返回匹配正则表达式@H_502_1@ l[[:alpha:]]{4}@H_502_1@的位置:@H_403_11@

@H_502_1@SELECT
REGEXP_INSTR('But,soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}') AS result
FROM dual;@H_403_11@

@H_502_1@RESULT
----------
17@H_403_11@

@H_502_1@注意返回值为@H_502_1@17@H_502_1@,这是@H_502_1@light@H_502_1@中@H_502_1@l@H_502_1@的位置。@H_403_11@

@H_502_1@下面这个查询返回第二次匹配正则表达式@H_502_1@ s[[:alpha:]]{3}@H_502_1@的位置,匹配位置从@H_502_1@1@H_502_1@开始:@H_403_11@

@H_502_1@SELECT
REGEXP_INSTR('But,soft! What light through yonder window softly breaks?',
's[[:alpha:]]{3}',1,2) AS result
FROM dual;@H_403_11@

@H_502_1@RESULT
----------
45@H_403_11@

@H_502_1@下面这个查询使用@H_502_1@REGEXP_INSTR@H_502_1@函数返回第二次匹配字母@H_502_1@ o @H_502_1@的位置,匹配位置从@H_502_1@10@H_502_1@开始:@H_403_11@

@H_502_1@SELECT
REGEXP_INSTR('But,
'o',10,2) AS result
FROM dual;@H_403_11@

@H_502_1@RESULT
----------
32@H_403_11@

@H_502_1@3. REGEXP_REPLACE()@H_403_11@

@H_502_1@REGEXP_REPLACE(x,replace_string [,occurrence[,match_option]]]])@H_502_1@用于在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@,并将其替换为@H_502_1@ replace_string@H_502_1@。@H_403_11@

@H_502_1@下面这个查询使用@H_502_1@REGEXP_REPLACE@H_502_1@函数将匹配正则表达式@H_502_1@ l[[:alpha:]]{4}@H_502_1@的子字符串替换为字符串@H_502_1@ sound@H_502_1@:@H_403_11@

@H_502_1@SELECT
REGEXP_REPLACE('But,
'l[[:alpha:]]{4}','sound') AS result
FROM dual;@H_403_11@

@H_502_1@RESULT
---------------------------------------------------
But,soft! What sound through yonder window breaks?@H_403_11@

@H_502_1@注意@H_502_1@light@H_502_1@已经被替换为@H_502_1@sound@H_502_1@。@H_403_11@

@H_502_1@4. REGEXP_SUBSTR()@H_403_11@

@H_502_1@REGEXP_SUBSTR(x,pattern[,match_option]]])@H_502_1@用于在@H_502_1@x@H_502_1@中查找匹配@H_502_1@pattern@H_502_1@的子字符串,开始位置由@H_502_1@ start@H_502_1@指定。@H_403_11@

@H_502_1@下面这个查询使用@H_502_1@REGEXP_SUBSTR@H_502_1@函数返回匹配正则表达式@H_502_1@ l[[:alpha:]]{4}@H_502_1@的子字符串:@H_403_11@

@H_502_1@SELECT
REGEXP_SUBSTR('But,
'l[[:alpha:]]{4}') AS result
FROM dual;@H_403_11@

@H_502_1@RESUL
-----
light@H_403_11@

@H_502_1@5. REGEXP_COUNT()@H_403_11@

@H_502_1@REGEXP_COUNT()@H_502_1@是@H_502_1@Oracle Database 11g@H_502_1@新增加的一个函数。@H_502_1@REGEXP_COUNT(x,match_option]])@H_502_1@用于在@H_502_1@x@H_502_1@中查找@H_502_1@pattern@H_502_1@,并返回@H_502_1@pattern@H_502_1@在@H_502_1@x@H_502_1@中出现的次数。可以提供可选参数@H_502_1@start@H_502_1@,指出要从@H_502_1@x@H_502_1@中开始查找@H_502_1@pattern@H_502_1@的那个字符;也可以提供可选的@H_502_1@match_option@H_502_1@字符串,指出匹配选项。@H_403_11@

@H_502_1@下面这个查询使用@H_502_1@REGEXP_COUNT@H_502_1@函数返回正则表达式@H_502_1@s[[:alpha:]]{3}@H_502_1@出现的次数:@H_403_11@

@H_502_1@SELECT
REGEXP_COUNT('But,
's[[:alpha:]]{3}') AS result
FROM dual;@H_403_11@

@H_502_1@ RESULT
----------
2@H_403_11@

@H_502_1@注意返回结果是@H_502_1@2@H_502_1@,这表明正则表达式在提供的字符串中有两次匹配。@H_403_11@

猜你在找的正则表达式相关文章