一. 基本介绍
正则表达式(regularexpression)描述了一种字符串匹配的规则,正则表达式本身就是一个字符串,使用这个字符串来描述、用来定义匹配规则,匹配一系列符合某个句法规则的字符串。在开发中,正则表达式通常被用来检索、替换那些符合某个规则的文本。
MySQL通过REGEXP关键字支持正则表达式进行字符串匹配。
二. ^的用法
^是在字符串的前面开始匹配,可以理解为匹配前缀
^ 在字符串开始处进行匹配
select 'abc' regexp '^a';
^ 其实就是匹配开头的子符 因为abc是以a开头,所以它的结果是1
当然如果我们想要匹配前缀字符串的话,则需要加上括号();
select 'abc' regexp '^(ab)';
select 'abc' regexp '^(ac)';
abc的前缀是ac,所以第一个返回为1,第二个范围为0。
注意:一个符号 ^ 只能对应一个字符进行 ^ 方式的匹配,如果要将一个字符串进行^方式匹配,则要将其看作一个整体,我们用括号()来将其表示为一个整体,包括后面的表达式也是如此。
三. $的用法
$其实就是在字符的末尾出开始匹配,可以理解为匹配后缀
$ 在字符串末尾开始匹配
select 'abc' regexp 'a$';
select 'abc' regexp 'c$';
$的作用是匹配尾部的字符 因为abc是以c结尾,所以第一个结果为0,第二个为1
同样,如果我们的后缀是一个字符串,则需要用括号。
select 'abc' regexp '(bc)$';
select 'abc' regexp '(ac)$';
abc的后缀是bc,所以第一个结果为1,第二个为0。
四 . 的用法
.可以匹配除\n以外的任何字符串,可以理解为可以抵消掉任意字符,例如:我们用 ’.b’对
’abc’行匹配,.匹配了第一个字符a,而b刚好匹配,所以它的结果是真。
举例:
.匹配任意字符串
select 'abc' regexp '.b';
select 'abc' regexp '.c';
select 'abc' regexp '.a';
五. […]和[^…]的用法
[…]的作用是:
匹配包含的任意一个字符,就是说只要能匹配到[]中的一个字符就行。
[…] 匹配括号中的任意单个字符
select 'abc' regexp '[xyz]';
select 'abc' regexp '[xaz]';
[^…]的作用是:
匹配为被包含的任意字符,就是指,匹配含有[]中没有的字符。例如:[^abc]可以匹配abcd中的d。
同时我们要注意,^只有在[]中的时候才有取反的意思。
select 'a' regexp '[^abc]';
select 'x' regexp '[^abc]';
select 'abc' regexp '[^a]';
六. *和+的用法
’ * '的用法官方的描述我觉得有点歧义,最主要的歧义还是因为他对+的描述。
这里说 * 是匹配0次或多次,而+是匹配一次或多次,这样描述很容易让人认为,他是将1次和多次区分开来,而且我们在学数学的概率论时也会将1次和多次区分开来,所以就肯让人理解且 * 是匹配0和多次,如果匹配到了1次,则不行。
可实际上却不是如此,最后查看别人的博客,才发现,它的意思是0到n次,也就是0次以上。
用法
select 'stab'regexp '[.ta*b]';
select 'stb'regexp '[.ta*b]';
select ''regexp '[.ta*b]';
select ''regexp '[a*]';
+的用法:
select 'stab' regexp '.ta+b';
select 'stb' regexp '.ta+b';
七. ?的用法
?的作用就是匹配0个或1个则为真,其他情况则为假。
举例:
select 'stb' regexp '.ta?b';
select 'stab' regexp '.ta?b';
select 'staab' regexp '.ta?b';
八. | 的用法
| 的作用就是匹配到了其中一个即可,例如a|b,这要目标字符串中有a,b其中一个即可。
select 'a' regexp 'a|b';
select 'b' regexp 'a|b';
select 'b' regexp '^(a|b)';
select 'a' regexp '^(a|b)';
select 'c' regexp '^(a|b)';
九. {}的用法
{}有两种形式:
- {n}表示匹配某个字符出现了n次
- {n,m}表示某个字符出现了n到m次
举例:
u{n} 匹配n个u
select 'auuuuuuub' regexp 'u{7}';
select 'auuuuuuub' regexp 'au{7}b';
u{n,m} 匹配n到m个u
select 'auuuub' regexp 'au{3,5}b';
select 'auuuuub' regexp 'au{3,5}b';
select 'auuuuuub' regexp 'au{3,5}b';