例如,SELECT REGEXP_SUBSTR('new jersey', 'new(?!\\syork)'); 会返回子串 new。
(?<=pattern) 肯定的 lookbehind 零宽度断言 查看字符串中的当前位置是否前面紧挨着出现了 pattern,而 pattern 不会成为匹配字符串的一部分。所以,'(?<=A)B' 匹配前面紧挨着 A 的 B,但不使 A 成为匹配的一部分。
例如,SELECT REGEXP_SUBSTR('new york', '(?<=new\\s)york'); 会返回子串 york。
(?<!pattern) 否定的 lookbehind 零宽度断言 查看字符串中的当前位置的前面是否没有 紧挨着出现 pattern,而 pattern 不会成为匹配字符串的一部分。
例如,SELECT REGEXP_SUBSTR('about york', '(?<!new\\s)york'); 会返回子串 york。
(?>pattern) 所属关系局部子表达式 仅匹配与 pattern 匹配的剩余字符串的最大前缀。
例如,在 'aa' REGEXP '(?>a*)a' 中,(?>a*) 匹配(并消耗)aa,而决不仅仅是前导 a。因此,'aa' REGEXP '(?>a*)a' 的计算结果为 false。
(?:pattern) 非捕获块 该语法在功能上就等效于 pattern,是为实现兼容性而提供。
例如,在 'bb' REGEXP '(?:b*)b' 中,(?:b*) 匹配(并消耗)bb。但是,与所属关系局部子表达式不同,bb 中的最后一个 b 会被放弃,以允许整个匹配成功(即,允许与在非捕获块的外部找到的 b 匹配)。
同样,'a(?:bc|b)c' 匹配 abcc 和 abc。在匹配 abc 时,bc 中最后面的 c 会发生回溯,以便可以使用组外的 c 来使匹配成功。
(?#text) 用于注释。text 的内容会被忽略。
正则表达式示例
下表显示正则表达式的使用示例。所有示例都适用于 REGEXP,部分示例也适用于 SIMILAR TO(如[示例]列中注释)。结果视您用于搜索的搜索条件而异。对于使用 SIMILAR TO 的示例,结果还要另外根据是否区分大小写和重音而异。
有关 REGEXP 和 SIMILAR TO 如何处理匹配和计算范围的比较,请参见LIKE、REGEXP 和 SIMILAR TO 搜索条件。
请注意,如果在文字字符串中使用这些示例(例如,'.+@.+\\..+'),则应使用双反斜线
示例
匹配示例
Visa: 4[0-9]{3}\s[0-9]{4}\s[0-9]{4}\s[0-9]{4} MasterCard: 5[0-9]{3}\s[0-9]{4}\s[0-9]{4}\s[0-9]{4} American Express: 37[0-9]{2}\s[0-9]{4}\s[0-9]{4}\s[0-9]{4} Discover: 6011\s[0-9]{4}\s[0-9]{4}\s[0-9]{4} 非匹配 (Visa): 3124 5675 4400 4567, 4123-6453-2222-1746 同样,MasterCard 匹配一组 16 位的号码,以 5 开头,每四位号码组成的子集之间各有一个空格。American Express 和 Discover 是相同的,但是必须分别以 37 和 6011 开头。 ([0-2][0-9]|30|31)/(0[1-9]|1[0-2])/[0-9]{4} 非匹配: 31/4/1999, 31/4/99, 1999/04/19, 42/67/25456 ([A-Za-z]:|\\)\\[[:alnum:][:whitespace:]!"#$%&'()+,-.\\;=@\[\]^_`{}~.]* 非匹配:\directory\directory2, /directory2 [[:word:]\-.]+@[[:word:]\-.]+\.[[:alpha:]]{2,3} 非匹配:abc@dummy, ab*cd@efg.hijkl .+@.+\..+ 非匹配:abc.123.*&ca, ^%abcdefg123 [A-F0-9]{6} 非匹配:123G45, 12-44-CC [A-F0-9]{2}\s[A-F0-9]{2}\s[A-F0-9]{2} 非匹配:SS AB CD, AA BB CC DD, 1223AB ((2(5[0-5]|[0-4][0-9])|1([0-9][0-9])|([1-9][0-9])|[0-9])\.){3}(2(5[0-5]|[0-4][0-9])|1([0-9][0-9])|([1-9][0-9])|[0-9]) 非匹配: 0.0.0, 256.89.457.02 /\*.*\*/|//[^\n]* 非匹配:a=1 (\+|-)?\$[0-9]*\.[0-9]{2} 非匹配: $1, 1.00$, $-75.17 (\+|-)?[0-9]+(\.[0-9]+)? 非匹配: ++41, 41.1.19, -+97.14 [[:alnum:]]{4,10} 非匹配:abc, *ab12, abcdefghijkl [a-zA-Z]\w{3,7} 非匹配:*&^g, abc, 1bcd ([2-9][0-9]{2}-[2-9][0-9]{2}-[0-9]{4})|([2-9][0-9]{2}\s[2-9][0-9]{2}\s[0-9]{4}) 非匹配: 888 6898, 5198886898, 519 883-6898 [A-Z0-9].*(\.|\?|!) 非匹配:i am fine [[:upper:]0-9].*[.?!] 非匹配:i am fine [0-9]{3}-[0-9]{2}-[0-9]{4} 非匹配:123 45 6789, 123456789, 1234-56-7891 ()?www\.[a-zA-Z0-9]+\.[a-zA-Z]{2,3} 非匹配:,
信用卡号(仅限 REGEXP):
日期(REGEXP 和 SIMILAR TO 均适用):
Windows 绝对路径(仅限 REGEXP):
电子邮件地址(仅限 REGEXP):
电子邮件地址(仅限 REGEXP):
HTML 十六进制颜色代码(REGEXP 和 SIMILAR TO 均适用):
HTML 十六进制颜色代码(仅限 REGEXP):
IP 地址(仅限 REGEXP):
Java 注释(仅限 REGEXP):
货币(仅限 REGEXP):
正数、负数和小数值(仅限 REGEXP):
口令(REGEXP 和 SIMILAR TO 均适用):
口令(仅限 REGEXP):
电话号码(REGEXP 和 SIMILAR TO 均适用):
句子(仅限 REGEXP):
句子(仅限 REGEXP):
社保号码(REGEXP 和 SIMILAR TO 均适用):
URL(仅限 REGEXP):