欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle 正则表达式

程序员文章站 2022-06-08 19:13:45
...

REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])函数(10g新函数)描

分组字符

定义

举例

()

此字符可以组合括号内模式所匹配的字符,它是一个捕获组,也就是说模式匹配的字符作为最终设置了ExplicitCapture选项――默认状态下字符不是匹配的一部分

输入字符串为:ABC1DEF2XY

匹配3个从A到Z的字符和1个数字的正则表达式:([A-Z]{3}\d)

将产生两次匹配:Match 1=ABC1;Match 2=DEF2

每次匹配对应一个组:Match1的第一个组=ABC;Match2的第1个组=DEF

有了反向引用,就可以通过它在正则表达式中的编号以及C#和类Group,GroupCollection来访问组。如果设置了ExplicitCapture选项,,就不能使用组所捕获的内容

(?:)

此字符可以组合括号内模式所匹配的字符,它是一个非捕获组,这意味着模式所的字符将不作为一个组来捕获,但它构成了最终匹配结果的一部分。它基本上与上面的组类型相同,但设定了选项ExplicitCapture

输入字符串为:1A BB SA1 C

匹配一个数字或一个A到Z的字母,接着是任意单词字符的正则表达式为:(?:\d|[A-Z]\w)

它将产生3次匹配:每1次匹配=1A;每2次匹配=BB;每3次匹配=SA

但是没有组被捕获

(?

此选项组合括号内模式所匹配的字符,并用尖括号中指定的值为组命名。在正则表达式中,可以使用名称进行反向引用,而不必使用编号。即使不设置ExplicitCapture选项,它也是一个捕获组。这意味着反向引用可以利用组内匹配的字符,或者通过Group类访问

输入字符串为:Characters in Sienfeld included Jerry Seinfeld,Elaine Benes,Cosno Kramer and George Costanza能够匹配它们的姓名,并在一个组llastName中捕获姓的正则表达式为:\b[A-Z][a-z]+ (?[A-Z][a-z]+)\b

它产生了4次匹配:First Match=Jerry Seinfeld; Second Match=Elaine Benes; Third Match=Cosmo Kramer; Fourth Match=George Costanza

每一次匹配都对应了一个lastName组:

第1次匹配:lastName group=Seinfeld

第2次匹配:lastName group=Benes

第3次匹配:lastName group=Kramer

第4次匹配:lastName group=Costanza

不管是否设置了选项ExplictCapture,组都将被捕获

(?=)

正声明。声明的右侧必须是括号中指定的模式。此模式不构成最终匹配的一部分

正则表达式\S+(?=.NET)要匹配的输入字符串为:The languages were Java,C#.NET,VB.NET,C,Jscript.NET,Pascal

将产生如下匹配:〕

C#

VB

JScript.

(?!)

负声明。它规定模式不能紧临着声明的右侧。此模式不构成最终匹配的一部分

\d{3}(?![A-Z])要匹配的输入字符串为:123A 456 789111C

将产生如下匹配:

456

789

(?

反向正声明。声明的左侧必须为括号内的指定模式。此模不构成最终匹配的一部分

正则表达式(?

它将产生如下匹配:

Mexico

England

(?

反向正声明。声明的左侧必须不能是括号内的指定模式。此模式不构成最终匹配的一部分

正则表达式(?

它将实现如下匹配:

56F

89C

(?>)

非回溯组。防止Regex引擎回溯并且防止实现一次匹配

假设要匹配所有以“ing”结尾的单词。输入字符串如下:He was very trusing

正则表达式为:.*ing

它将实现一次匹配――单词trusting。“.”匹配任意字符,当然也匹配“ing”。所以,Regex引擎回溯一位并在第2个“t”停止,然后匹配指定的模式“ing”。但是,如果禁用回溯操作:(?>.*)ing

它将实现0次匹配。“.”能匹配所有的字符,包括“ing”――不能匹配,从而匹配失败