MySQL-正则表达式详解
和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.
转载自:https://segmentfault.com/a/1190000041938786