300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql正则_mysql正则表达式总结

mysql正则_mysql正则表达式总结

时间:2020-03-31 14:16:59

相关推荐

mysql正则_mysql正则表达式总结

MySql正则表达式:

1):^是头匹配

mysql> delimiter //

mysql> select 'fnoo' regexp '^f';//

结果是1

^配合组合单元():

mysql> select 'fnoo' regexp '^(fno)';//

也就是以fno打头的字符串,上面的结果当然也是1

2):$匹配尾部

mysql> select 'fno' regexp '^(fn)o$';//

结果为1

正则语义为:匹配fn打头o结尾的字符串,这里也就是相当于"=fno"

3):*和.

任一匹配(0次或者多次)和单个任一字符正则语义符.

对于上面的问题,假如字符串是'fnobodfo'我们怎样匹配呢?

可能用正则语义表述就是:fn开头(^fn)o结尾(o$),中间匹配任一字符(.*)

然后我们拼接出来就是:

mysql>select 'fnobodfo' regexp '^fn.*o$';//

结果为1匹配成功。

4):+和?

正则语义:匹配1个或者多个和匹配0个或者1个

mysql> select 'abbbba' regexp '^ab+a$';//

结果为1

mysql> select 'abbbba' regexp 'ab?a';//

结果为0

进一步:

mysql> select 'abbbb' regexp 'ab?';//

+----------------------+

|1 |

+----------------------+

mysql> select 'abbbb' regexp '^ab?';//

+-----------------------+

| 1 |

+-----------------------+

上面这条语句的正则语义是:以a打头,第二位为b或者不是b的,且任一多字符结尾

的字符串.

其实这条语句也直接可以写成:

mysql> select 'abbbb' regexp '^a';//

这样反而更加清晰,别人也容易理解。

mysql> select 'abbbb' regexp '^ab?$';//

+------------------------+

| 0 |

+------------------------+

上面的正则语义:a打头,以b或者没有任何字符结尾的字符串,所以这个只有两种字

符串匹配:a和ab

5): ()和|

组合单元和或者

mysql> select 'abcbcd' regexp 'a(bc)*d';

-> //

结果为1

mysql>select 'ababd' regexp 'aa|b*d';//

结果为1

正则语义:a打头,a或者b在中间匹配0次或者多次,d结尾。

延伸:

mysql> select 'ababd' regexp 'd$';//-->可以写成'.*d$'

+---------------------+

| 1 |

+---------------------+

mysql> select 'ababd' regexp '^a';//-->可以写成'^a.*'

+---------------------+

| 1 |

+---------------------+

6):{}

指定匹配次数范围

mysql> select 'addddd' regexp 'ad{1,}';//

正则语义:a打头,d匹配1次或者多次。

mysql> select 'addddd' regexp 'ad{6}';//

mysql> select 'a' regexp 'ad{0,6}';//

其实我感觉我们应该尽量使用{}来取代+,?,*等语义符在可能的情况下,这样也就提

高了正则式的可读性.

但是有一点得注意:

{}的范围是0-255,如果你尝试下面操作:

select expr regexp 'ad{255}',且这时expr字符串中d字符超过了255个,则这时

正则式返回的是1,这算不算是个BUG,还有待证实。

这也是{}不能完全取代:+,*的原因。

7):[],[^ ]和[a-b]

mysql> select 'abcdef' regexp '^[^a-c]';//

+---------------------------+

| 0 |

+---------------------------+

正则语义:不是a到c范围内开头的。

mysql> select 'abcdef' regexp '^[^b-c]';//

1

8):\\和其他转义符

mysql> select '1+2' regexp '1\\+2';//

mysql> select '1\n2' regexp '1\\\n2';//

记住:mysql下的字符串中是可以用转义符的,像\n \r等.

当然你也可以直接在输入字符串时按回车.

mysql> select '1

'> ' regexp '1\\\n';//

+---------------------+

| 1 |

+---------------------+

9):[[: character_class:]]的使用

其实知道oracle里的正则式,这个也就很容易用了

mysql> select '012365afsdf' regexp '[[:alnum:]]*';//

+-------------------------------------+

| 1 |

+-------------------------------------+

mysql> select '012365afsdf' regexp '[0-9]*';//

+-------------------------------+

| 1 |

+-------------------------------+

另外还有些常用的:

[[:alpha:]]

[[:alnum:]]

[[:blank:]]

[[:digit:]]

[[:lower:]]

[[:upper:]]

[[

unct:]]

上面是mysql下正则式的简单总结。

作者: ocpdba591

发布时间: -09-26

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。