Oracle数据库中使用正则表达式的超详细教程 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0. 引言本文介绍 Oracle 数据库的正则表达式支持 。本文涵盖以下主题:
1. 什么是正则表达式?正则表达式使用标准化语法约定指定要在字符串数据中搜索的模式 。正则表达式可以指定复杂的字符序列模式 。例如,以下正则表达式: a(b|c)d 搜索模式:“a”,后跟“b”或“c”,最后跟“d” 。此正则表达式同时匹配“abd”和“acd” 。 正则表达式使用两种类型的字符指定:
2. Oracle 数据库正则表达式支持Oracle 数据库实现了符合 POSIX 扩展正则表达式 (ERE) 规范的正则表达式支持 。 正则表达式支持是通过一组 Oracle 数据库 SQL 函数实现的,这些函数允许您搜索和操作字符串数据 。您可以在任何使用 Oracle 数据库 SQL 的环境中使用这些函数 。有关详细信息,请参阅本章后面的“用于正则表达式的 Oracle 数据库 SQL 函数” 。 Oracle 数据库支持正则表达式中使用的一组常见元字符 。支持的元字符和相关功能的行为在“正则表达式中支持的元字符”中进行了描述 。
3. 用于正则表达式的 Oracle 数据库 SQL 函数数据库提供了一组 SQL 函数,允许您使用正则表达式搜索和操作字符串 。您可以在任何保存字符数据的数据类型(例如 CHAR、NCHAR、CLOB、NCLOB、NVARCHAR2 和 VARCHAR2)上使用这些函数 。 正则表达式必须用单引号括起来 。这样做可以确保 SQL 函数解释整个表达式,并可以提高代码的可读性 。 下表给出了每个正则表达式函数的简要说明 。
4. 正则表达式中支持的元字符下表列出了支持在传递给 SQL 正则表达式函数的正则表达式中使用的元字符 。有关这些元字符的匹配行为的详细信息在“构造正则表达式”中给出 。
5. 构建正则表达式使用正则表达式进行基本字符串匹配 可以使用正则表达式执行的最简单的匹配是基本字符串匹配 。对于这种类型的匹配,正则表达式是不带元字符的文字字符串 。例如,要查找序列“abc”,请指定正则表达式: abc 子表达式的正则表达式运算 如前所述,正则表达式是使用元字符和文字构造的 。对单个文字进行操作的元字符,例如“+”和“?”还可以对文字序列或整个表达式进行操作 。为此,您可以使用分组运算符将序列或子表达式括起来 。有关分组的更多信息,请参阅“子表达式” 。 正则表达式运算符和元字符用法 匹配任何字符–点,点运算符 ‘.’ 匹配当前字符集中的任何单个字符 。例如,要查找序列(“a”,后跟任何字符,后跟“c”),请使用以下表达式: a.c 该表达式匹配以下所有序列: abc adc a1c a&c 表达式不匹配: abb 一个或多个——加上,一个或多个运算符 ‘+’ 与前面的表达式的一个或多个匹配项相匹配 。例如,要查找字符“a”的一次或多次出现,可以使用正则表达式: a+ 该表达式匹配以下所有内容: a aa aaa 表达式不匹配: bbb 零或一——问号运算符,问号与前面的字符或子表达式的零次或一次(并且仅一次)匹配 。您可以将此运算符视为指定源文本中可选的表达式 。例如,要查找“a”,可选地后跟“b”,然后后跟“c”,您可以使用以下正则表达式: ab?c 该表达式匹配: abc ac 表达式不匹配: adc abbc 零个或更多——星星,零个或多个运算符 ‘*’ 匹配零个或多次出现的前面的字符或子表达式 。例如,要查找“a”,后跟零个或多次出现的“b”,然后是“c”,请使用正则表达式: ab*c 该表达式匹配以下所有序列: ac abc abbc abbbbc 表达式不匹配: adc 间隔–精确计数,精确计数间隔运算符用大括号内的单个数字指定 。您可以使用此运算符来搜索前面的字符或子表达式的确切出现次数 。例如,要查找“a”恰好出现 5 次的位置,您可以指定正则表达式: a{5} 该表达式匹配: aaaaa 表达式不匹配: aaaa 间隔——至少计数,您可以使用至少计数间隔运算符来搜索前面的字符或子表达式出现指定次数或多次的情况 。例如,要查找“a”至少出现 3 次的位置,可以使用正则表达式: a{3,} 该表达式匹配以下所有内容: aaa aaaaa 表达式不匹配: aa 间隔–计数之间,您可以使用计数间隔运算符来搜索指定范围内的出现次数 。例如,要查找“a”出现至少 3 次但不超过 5 次的位置,可以使用以下正则表达式: a{3,5} 该表达式匹配以下所有序列: aaa aaaa aaaaa 表达式不匹配: aa 匹配字符列表,您可以使用匹配字符列表来搜索列表中出现的任何字符 。例如,要查找“a”、“b”或“c”,请使用以下正则表达式: [abc] 此表达式匹配以下每个字符串中的第一个字符: at bet cot 表达式不匹配: def 字符列表中允许使用以下正则表达式运算符,字符列表中包含的任何其他元字符都会失去其特殊含义(被视为文字):
不匹配的字符列表,使用非匹配字符列表指定您不想匹配的字符 。不在非匹配字符列表中的字符将作为匹配项返回 。例如,要从搜索结果中排除字符“a”、“b”和“c”,请使用以下正则表达式: [^abc] 此表达式匹配以下字符串中的字符“d”和“g”: abcdef ghi 表达式不匹配: abc 与匹配字符列表一样,非匹配字符列表中允许使用以下正则表达式运算符(字符列表中包含的任何其他元字符都将被忽略):
例如,以下正则表达式从搜索结果中排除“a”和“i”之间的任何字符: [^a-i] 此表达式与以下字符串中的字符“j”和“l”匹配: hijk lmn 表达式与字符不匹配: abcdefghi 使用 Or 运算符 ‘|’ 指定替代表达式 。例如,要匹配“a”或“b”,请使用以下正则表达式: a|b 子表达式,您可以使用子表达式运算符将要查找的字符分组为字符串或创建复杂的表达式 。例如,要查找后跟“def”的可选字符串“abc”,请使用以下正则表达式: (abc)?def 此表达式与以下字符串中的字符串“abcdef”和“def”匹配: abcdefghi defghi 表达式与字符串不匹配: ghi 反向引用,反向引用可让您搜索重复的表达式 。您可以使用 ‘ ’ 指定反向引用,其中 n 是 1 到 9 之间的整数,表示 n th, 反向引用可让您搜索重复的表达式 。您可以使用 ' n ' 指定反向引用,其中 n 是 1 到 9 之间的整数,表示 n th 例如,要查找重复出现的字符串“abc”或“def”,请使用以下正则表达式: (abc|def)1 该表达式匹配以下字符串: abcabc defdef 该表达式与以下字符串不匹配: abcdef abc 反向引用从每个前面的子表达式的左括号开始从左到右对子表达式进行计数 。 反向引用允许您搜索重复的字符串,而无需提前知道实际的字符串 。例如,正则表达式: ^(.*)1$ 匹配由同一字符串的两个相邻出现组成的行 。 转义字符,使用转义字符 ‘’ 搜索通常被视为元字符的字符 。例如,要搜索“+”字符,请使用以下正则表达式: + 此表达式与以下字符串中的加号“+”匹配: abc+def 表达式与字符串中的任何字符都不匹配: abcdef 线锚点的起点,使用行开头锚点 ^ 搜索仅出现在行开头的表达式 。例如,要查找行开头出现的字符串 def ,请使用以下表达式: ^def 此表达式与字符串中的 def 匹配: defghi 该表达式与以下字符串中的 def 不匹配: abcdef 行末锚点,行尾锚元字符 ‘$’ 允许您搜索仅出现在行尾的表达式 。例如,要查找出现在行尾的 def ,请使用以下表达式: def$ 此表达式与字符串中的 def 匹配: abcdef 该表达式与以下字符串中的 def 不匹配: defghi POSIX 字符类,POSIX 字符类运算符允许您在字符列表中搜索属于特定 POSIX 字符类成员的表达式 。您可以使用此运算符搜索具有特定格式的字符(例如大写字符),也可以搜索特殊字符(例如数字或标点符号字符) 。支持全套 POSIX 字符类 。 要使用此运算符,请使用语法 [: class :] 指定表达式,其中 class 是要搜索的 POSIX 字符类的名称为了 。例如,要搜索一个或多个连续的大写字符,请使用以下正则表达式: [[:upper:]]+ 此表达式与字符串中的“DEF”匹配: abcDEFghi 该表达式不返回以下字符串的匹配项: abcdefghi POSIX 整理序列,POSIX 整理序列元素运算符 [. .] 允许您在正则表达式中使用整理序列 。您指定的元素必须是当前语言环境中定义的整理序列 。 此运算符允许您在正则表达式中使用多字符整理序列,否则只允许使用一个字符 。例如,您可以使用此运算符来确保整理序列“ch”(在西班牙语等语言环境中定义时)在取决于字符顺序的操作中被视为一个字符 。 要使用整理序列运算符,请指定 [. element .] ,其中 element 是您要查找的整理序列 。您可以使用当前区域设置中定义的任何整理序列,包括单字符元素和多字符元素 。 例如,要查找整理序列“ch”,请使用以下正则表达式: [[.ch.]] 此表达式与以下字符串中的序列“ch”匹配: chabc 该表达式与以下字符串不匹配: cdefg 您可以在需要排序规则的任何正则表达式中使用排序序列运算符 。例如,要指定从“a”到“ch”的范围,可以使用以下表达式: [a-[.ch.]] POSIX 字符等效类,使用 POSIX 字符等效类运算符搜索当前区域设置中等效的字符 。例如,查找西班牙语字符“ñ”以及“n” 。 要使用此运算符,请指定 [= character =] ,以查找与指定 character . 例如,以下正则表达式可用于在西班牙语语言环境中搜索相当于“n”的字符: [[=n=]] 此表达式与以下字符串中的“N”和“ñ”匹配: El Ni?o 完结! refer: https://docs.oracle.com/cd/B13789_01/appdev.101/b10795/adfns_re.htm#1007566 总结到此这篇关于Oracle数据库中使用正则表达式的文章就介绍到这了,更多相关Oracle数据库正则表达式内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |