[MySQL] 用正則表達式進行搜索
正則表達式的作用就是匹配文本,講一個模式(正則表達式)與一個文本串進行比較。
基本字符匹配
SELECT 列名 FROM 表名 WHERE 列名 REGEXP 條件 ORDER BY 列名;
形式與LIKE相同,只不過REGEXP後面跟的條件為正則表達式。
差別:
LIKE匹配整個列。如果被匹配的文本在列值中出現,LIKE不會找到它,相應的行也不會被返回(除非使用通配符)。
REGEXP在列值內進行匹配,如果被匹配的文本在列值中出現,REGEXP會找到它,相應的行將被返回。
正則表達式不區分大小寫,如果需要區分則要使用BINARY關鍵字。如 REGEXP BINARY + 正則表達式條件。
進行OR匹配
使用正則表達式符號‘|’將條件並列。
例如 1000 OR 2000 = 1000|2000
匹配幾個字符之一
使用[]來定義一組字符
例如 [123]abc = 1abc 或 2abc 或 3abc
[123]abc = [1|2|3]abc
匹配除指定字符外的任何東西
[^123] 匹配除1\2\3以外的任何東西
匹配範圍
[0123456789] = [0-9]
匹配特殊字符
‘.‘匹配任意字符
\\- 表示查找-
\\. 表示查找.
\\\ 表示查找\
匹配字符類
類 說明
[:alnum:] 任意字母和數字[a-zA-Z0-9]
[:alpha:] 任意字符[a-zA-Z]
[:blank:] 空格和制表[\\t]
[:cntrl:] ASCII控制字符(ASCII 0到31和127)
[:digit:] 任意數字[0-9]
[:graph:] 與[:print:]相同,但不包含空格
[:lower:] 任意小寫字母[a-z]
[:print:] 任意可打印字符
[:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
[:space:] 包含空格在內的任意空白字符[\\f\\n\\r\\t\\v]
[:upper:] 任意大寫字母[A-Z]
[:xdigit:] 任意十六進制數字[a-fA-F0-9]
匹配多個實例
重復元字符
元字符 說明
* 0個或多個匹配
+ 1個或多個匹配{1,}
? 0個或1個匹配{0, 1}
{n} 指定數目的匹配
{n,} 不少於指定數目的匹配
{n, m} 匹配數目的範圍(m不超過255)
定位符
匹配指定位置的文本
定位元字符
元字符 說明
^ 文本的開始
$ 文本的結尾
[[:<:]] 詞的開始
[[:>:]] 詞的結尾
^有兩種用法,在集合中(用[和]定義),用它來否定該集合,否則,用來指串的開始處
[MySQL] 用正則表達式進行搜索