SQL Anywhere正则表达式语法与示例(5)

例如,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 搜索条件

请注意,如果在文字字符串中使用这些示例(例如,'.+@.+\\..+'),则应使用双反斜线

示例 匹配示例
信用卡号(仅限 REGEXP):

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): 4123 6453 2222 1746

非匹配 (Visa):

3124 5675 4400 4567, 4123-6453-2222-1746

同样,MasterCard 匹配一组 16 位的号码,以 5 开头,每四位号码组成的子集之间各有一个空格。American Express 和 Discover 是相同的,但是必须分别以 37 和 6011 开头。

 
日期(REGEXP 和 SIMILAR TO 均适用):

([0-2][0-9]|30|31)/(0[1-9]|1[0-2])/[0-9]{4}

  匹配: 31/04/1999, 15/12/4567

非匹配: 31/4/1999, 31/4/99, 1999/04/19, 42/67/25456

 
Windows 绝对路径(仅限 REGEXP):

([A-Za-z]:|\\)\\[[:alnum:][:whitespace:]!"#$%&'()+,-.\\;=@\[\]^_`{}~.]*

  匹配:\\server\share\file

非匹配:\directory\directory2, /directory2

 
电子邮件地址(仅限 REGEXP):

[[:word:]\-.]+@[[:word:]\-.]+\.[[:alpha:]]{2,3}

  匹配:abc.123@def456.com, _123@abc.ca

非匹配:abc@dummy, ab*cd@efg.hijkl

 
电子邮件地址(仅限 REGEXP):

.+@.+\..+

  匹配:*@qrstuv@wxyz.12345.com, __1234^%@@abc.def.ghijkl

非匹配:abc.123.*&ca, ^%abcdefg123

 
HTML 十六进制颜色代码(REGEXP 和 SIMILAR TO 均适用):

[A-F0-9]{6}

  匹配:AB1234, CCCCCC, 12AF3B

非匹配:123G45, 12-44-CC

 
HTML 十六进制颜色代码(仅限 REGEXP):

[A-F0-9]{2}\s[A-F0-9]{2}\s[A-F0-9]{2}

  匹配:AB 11 00, CC 12 D3

非匹配:SS AB CD, AA BB CC DD, 1223AB

 
IP 地址(仅限 REGEXP):

((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])

  匹配: 10.25.101.216

非匹配: 0.0.0, 256.89.457.02

 
Java 注释(仅限 REGEXP):

/\*.*\*/|//[^\n]*

  匹配位于 /* 和 */ 之间的 Java 注释,或者前缀为 // 的一行注释。

非匹配:a=1

 
货币(仅限 REGEXP):

(\+|-)?\$[0-9]*\.[0-9]{2}

  匹配: $1.00, -$97.65

非匹配: $1, 1.00$, $-75.17

 
正数、负数和小数值(仅限 REGEXP):

(\+|-)?[0-9]+(\.[0-9]+)?

  匹配: +41, -412, 2, 7968412, 41, +41.1, -3.141592653

非匹配: ++41, 41.1.19, -+97.14

 
口令(REGEXP 和 SIMILAR TO 均适用):

[[:alnum:]]{4,10}

  匹配:abcd, 1234, A1b2C3d4, 1a2B3

非匹配:abc, *ab12, abcdefghijkl

 
口令(仅限 REGEXP):

[a-zA-Z]\w{3,7}

  匹配:AB_cd, A1_b2c3, a123_

非匹配:*&^g, abc, 1bcd

 
电话号码(REGEXP 和 SIMILAR TO 均适用):

([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})

  匹配: 519-883-6898, 519 888 6898

非匹配: 888 6898, 5198886898, 519 883-6898

 
句子(仅限 REGEXP):

[A-Z0-9].*(\.|\?|!)

  匹配:Hello, how are you?

非匹配:i am fine

 
句子(仅限 REGEXP):

[[:upper:]0-9].*[.?!]

  匹配:Hello, how are you?

非匹配:i am fine

 
社保号码(REGEXP 和 SIMILAR TO 均适用):

[0-9]{3}-[0-9]{2}-[0-9]{4}

  匹配: 123-45-6789

非匹配:123 45 6789, 123456789, 1234-56-7891

 
URL(仅限 REGEXP):

()?www\.[a-zA-Z0-9]+\.[a-zA-Z]{2,3}

  匹配:、

非匹配:,

 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wyfgpd.html