Maison > Article > base de données > SQL 中的正则函数
Oracle中支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似,比LIKE强大得多。2,REGEXP_INSTR :与INSTR
Oracle中支持正则表达式的函数主要有下面四个:
1,REGEXP_LIKE :与LIKE的功能相似,比LIKE强大得多。
2,REGEXP_INSTR :与INSTR的功能相似。
3,REGEXP_SUBSTR :与SUBSTR的功能相似。
4,REGEXP_REPLACE :与REPLACE的功能相似。
REGEXP_REPLACE(source_string,pattern,replace_string,position,occurtence,match_parameter)函数(10g新函数)
描述:字符串替换函数。相当于增强的replace函数。Source_string指定源字符表达式;pattern指定规则表达式;replace_string指定用于替换的字符串;position指定起始搜索位置;occurtence指定替换出现的第n个字符串;match_parameter指定默认匹配操作的文本串。ITPUB个人空间.x mz\ n`rg9[1`
其中replace_string,position,occurtence,match_parameter参数都是可选的。
REGEXP_SUBSTR(source_string, pattern[,position [, occurrence[, match_parameter]]])函数(10g新函数)
描述:返回匹配模式的子字符串。相当于增强的substr函数。Source_string指定源字符表达式;pattern指定规则表达式;position指定起始搜索位置;occurtence指定替换出现的第n个字符串;match_parameter指定默认匹配操作的文本串。
其中position,occurtence,match_parameter参数都是可选的。
match_option的取值如下:
'c' 说明在进行匹配时区分大小写(缺省值);
'i' 说明在进行匹配时不区分大小写;
'n' 允许使用可以匹配任意字符的操作符;
'm' 将x作为一个包含多行的字符串。
REGEXP_LIKE(source_string, pattern[, match_parameter])函数(10g新函数)
描述:返回满足匹配模式的字符串。相当于增强的like函数。Source_string指定源字符表达式;pattern指定规则表达式;match_parameter指定默认匹配操作的文本串。
其中position,occurtence,match_parameter参数都是可选的。
REGEXP_INSTR(source_string, pattern[, start_position[, occurrence[, return_option[, match_parameter]]]])函数(10g新函数)
描述: 该函数查找 pattern ,,并返回该模式的第一个位置。您可以随意指定您想要开始搜索的 start_position。 occurrence 参数默认为 1,除非您指定您要查找接下来出现的一个模式。return_option 的默认值为 0,它返回该模式的起始位置;值为 1 则返回符合匹配条件的下一个字符的起始位置。
一. 匹配字符
二. 重复字符
三. 定位字符
注:定位字符可以应用于字符或组合,放在字符串的左端或右端
四. 分组字符
分组字符
定 义
举 例
()
此字符可以组合括号内模式所匹配的字符,它是一个捕获组,也就是说模式匹配的字符作为最终设置了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]+(?
它产生了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