数据库正则表达式-语法词法分析

发布于:2025-02-11 ⋅ 阅读:(14) ⋅ 点赞:(0)

1. 简介

正则表达式是尝试匹配输入文本的一种模式。模式由一个或多个字符文本、运算符或构造组成。

2. 语法

  • 字符转义

正则表达式中的反斜杠字符(\)指示其后跟的字符(如下表)是特殊字符,或按照原意解释该字符。

转义字符

描述

模式

匹配(红色标出)

\a

与报警(bell)符\u0007匹配

\a

Error! + ’\u0007

\b

与退格键\u0008匹配

[\b]{3,}

\b\b\b\b

\t

与制表符\u0009匹配

(\w+)\t

item1\titem2\t

\r

与回车符\u000D匹配。与\n不等效

\r\n(\w+)

\r\nThese are \ntwo lines”

\v

与垂直制表符\u000B匹配

[\v]{2,}

\v\v\v

\f

与换页符\u000C匹配

[\f]{2,}

\f\f\f

\n

与换行符\u000A匹配

\r\n(\w+)

\r\nThese are \ntwo lines”

  • 字符类

字符类与一组字符中在的任意一个字符匹配。

转义字符

描述

模式

匹配(红色标出)

[character_group]

匹配character_group中任何单个字符,区分大小写

[ae]

gray

[^character_group]

求反:与不在character_group中任何单个字符匹配,区分大小写

[^ae]

gray

[first-last]

字符范围:从第一个至最后一个范围内的任何单个字符

[A-Z]

AB123匹配AB

.

通配符:与除\n之外的任何单个字符匹配(可以\.匹配真是的符号)

a.e

nave

\w

与任何单词字符匹配

\w

ID A1.3,匹配I,D,A,1,3

\W

与任何非单词字符匹配

\W

ID A1.3,匹配 .’

\s

与任何空白字符匹配

\w\s

ID A1.3匹配“D

\S

与任何非空白字符匹配

\s\S

int _ctr匹配“ _”

\d

与任何十进制数字匹配

\d

4 = IV

\D

与任何非十进制数的字符匹配

\D

4 = IV包括空白字符

  • 定位点

定位点或原子零宽度断言会使匹配成功或失败,具体取决于字符串中的当前位置,但它们不会使引擎在字符串中前进或使用字符。

断点

说明

模式

匹配

^

从字符串的开头开始匹配;在多行模式中,必须从该行的开头开始。

^\d{3}

"901-333-" 中的 "901"

$

匹配必须出现在字符串的末尾,或在字符串末尾的 \n 之前;在多行模式中,必须出现在该行的末尾之前,或在该行末尾的 \n 之前

-\d{3}$

"-901-333" 中的 "-333"

\A

匹配必须出现在字符串的开头

\A\d{3}

"901-333-" 中的 "901"

\Z

匹配必须出现在字符串的末尾或出现在字符串末尾的 \n 之前。

-\d{3}\Z

"-901-333" 中的 "-333"

\z

匹配必须出现在字符串的末尾

-\d{3}\z

"-901-333" 中的 "-333"

\G

匹配必须在上一个匹配结束的位置进行;如果以前没有匹配项,则从开始进行匹配的字符串中的位置开始。

\G\(\d\)

"(1)(3)(5)[7](9)" 中的 "(1)""(3)" 和 "(5)"

\b

匹配必须出现在 \w (字母数字)和 \W (非字母数字)字符之间的边界上。

\b\w+\s\w+\b

"them theme them them" 中的 "them theme" 和 "them them"

\B

匹配不得出现在 \b 边界上。

\Bend\w*\b

"end sends endure lender" 中的 "ends" 和 "ender"

  • 数量词

限定符指定在输入字符串中必须存在上一个元素(可以是字符、组或字符类)的多少个实例才能出现匹配项

断点

说明

模式

匹配

*

匹配上一个元素零次或多次

a.*c

"abcbc" 中的 "abcbc"

+

匹配上一个元素一次或多次

"be+"

"been" 中的 "bee""bent" 中的 "be"

?

匹配上一个元素零次或一次。

"rai?"

"rain" 中的 "rai"

{n}

匹配上一个元素恰好 n 次

",\d{3}"

"1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543" 和 ",210"

{n,m}

匹配上一个元素至少 n 次,但不多于 m 次

"\d{3,5}"

"166", "17668"

"193024" 中的 "19302"

*?

匹配上一个元素零次或多次,但次数尽可能少。

a.*?c

"abcbc" 中的 "abc"

+?

匹配上一个元素一次或多次,但次数尽可能少。

"be+?"

"been" 中的 "be""bent" 中的 "be"

??

匹配上一个元素零次或一次,但次数尽可能少。

"rai??"

"rain" 中的 "ra"

{n}?

匹配前面的元素恰好 n 次

",\d{3}?"

"1,043.6" 中的 ",043""9,876,543,210" 中的 ",876"",543" 和 ",210"

{n,}?

匹配上一个元素至少 n 次,但次数尽可能少。

"\d{2,}?"

"166", "29""1930"

{ n,m}?

匹配上一个元素的次数介于 n 和 m 之间,但次数尽可能少。

"\d{3,5}?"

"166", "17668"

"193024" 中的 "193" 和 "024"