关于mysql:MySQL正则表达式详解

45次阅读

共计 995 个字符,预计需要花费 3 分钟才能阅读完成。

和 LIKE 操作符用法类似,REGEXP 通知 MySQL,前面跟的是正则表达式。

根本字符匹配

在正则表达式中“.”这个符号示意匹配任意一个字符,例如:

SELECT p_name FROM products WHERE p_name REGEXP '.00' 

这句话就能够匹配 500 和 300 等 p_name

或匹配

搜寻两个串之一,相似 SELECT 的 OR 语句

SELECT p_name FROM products WHERE p_name REGEXP '300|500' 

匹配几个字符之一

例如,想要匹配 1bill 和 2bill 和 3bill,能够这样写:

SELECT p_name FROM products WHERE p_name REGEXP '[1|2|3]bill'

也能够间接简写成:

SELECT p_name FROM products WHERE p_name REGEXP '[123]bill'

匹配字符集和的否定

只用在后面加一个 ^, 例如想找到除了 123 以外的任何字符:

SELECT p_name FROM products WHERE p_name REGEXP '[^123]'

匹配范畴

能够用‘-’联合 [] 来定义范畴,比方 [1-3]、[c-g] 例如:

SELECT p_name FROM products WHERE p_name REGEXP '[1-3]bill'

匹配特殊字符

匹配特殊字符须要用‘//’来结尾,比方匹配‘.’:

SELECT p_name FROM products WHERE p_name REGEXP '//.'

匹配字符类(character class)

📢 不是很罕用:

匹配多个实例

举个例子,如果要同时匹配‘Bill(1 apple)’和‘Bill(8 apples)’:

SELECT p_name FROM products WHERE p_name REGECXP 'Bill \\([0-9] apple?\\)'

关键在于 apple 和 apples 的解决,这里用到的是 ’?’,除此之外还有以下这些:

匹配特定地位

以上都是任意地位匹配,上面介绍文本和词的结尾或者结尾匹配:
例如,要匹配‘1 apple’8 apple’:

SELECT p_name FROM products WHERE p_name REGECXP '^[0-9] apple'

除了文本结尾用 ’^’ 结尾用 ’$’ 之外,还有这些:


参考:Forta B. MySQL crash course[M]. Pearson Education India, 2006.

正文完
 0