欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mysql 字符串正則表達式及說明

 更新時間:2022年08月26日 09:29:13   作者:記憶的深藍  
這篇文章主要介紹了mysql 字符串正則表達式及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

概述

名稱描述
NOT REGEXP否定的REGEXP
REGEXP字符串是否匹配正則表達式
RLIKE字符串是否匹配正則表達式

正則表達式是指定復(fù)雜搜索的模式的有力方式。本文討論可用于正則表達式匹配的操作符,并舉例說明可以用于正則表達式操作的一些特殊字符和構(gòu)造。

MySQL使用了Henry Spencer的正則表達式實現(xiàn),這是為了符合POSIX 1003.2。MySQL使用擴展版本支持SQL語句中的正則表達式模式匹配操作。

本文不包含 Henry Spencer’s regex(7)手冊頁中可以找到的所有細節(jié)。該手冊頁包含在MySQL源代碼發(fā)行版中,在regex中,在regex目錄下的文件。

正則表達式運算符

expr NOT REGEXP pat, expr NOT RLIKE pat

這與NOT(expr REGEXP pat)相同。

expr REGEXP pat, expr RLIKE pat

如果字符串expr與模式pat指定的正則表達式匹配,則返回1。如果expr或pat為空,返回值為空。

RLIKE是REGEXP的同義詞。

該模式可以是一個擴展的正則表達式,它的語法是在正則表達式語法中討論的。模式不必是字符串。例如,可以將它指定為字符串表達式或表列。

Note

因為MySQL使用字符串中的C轉(zhuǎn)義語法(例如,\n代表換行符),所以您必須將您在REGEXP參數(shù)中使用的任何\都增加一倍。

正則表達式操作在決定字符類型和執(zhí)行比較時使用字符串表達式和模式參數(shù)的字符集和排序。如果參數(shù)具有不同的字符集或排序規(guī)則,則強制規(guī)則適用于第10.8.4節(jié)中所描述的“在表達式中進行排序的強制性”。如果任何一個參數(shù)都是二進制字符串,那么這些參數(shù)將以區(qū)分大小寫的方式作為二進制字符串處理。

mysql> SELECT 'Michael!' REGEXP '.*';
+------------------------+
| 'Michael!' REGEXP '.*' |
+------------------------+
|                      1 |
+------------------------+
mysql> SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
+---------------------------------------+
| 'new*\n*line' REGEXP 'new\\*.\\*line' |
+---------------------------------------+
|                                     0 |
+---------------------------------------+
mysql> SELECT 'a' REGEXP '^[a-d]';
+---------------------+
| 'a' REGEXP '^[a-d]' |
+---------------------+
|                   1 |
+---------------------+
mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
+----------------+-----------------------+
| 'a' REGEXP 'A' | 'a' REGEXP BINARY 'A' |
+----------------+-----------------------+
|              1 |                     0 |
+----------------+-----------------------+

警告

REGEXP和RLIKE操作符以字節(jié)的方式工作,因此它們不是多字節(jié)安全的,并且可能會產(chǎn)生多字節(jié)字符集的意外結(jié)果。此外,這些運算符將字符的字節(jié)值和重音字符進行比較,即使給定的排序規(guī)則將它們視為相等,它們也可能不相等。

正則表達式語法

正則表達式描述一組字符串。最簡單的正則表達式是沒有特殊字符的表達式。例如,正則表達式hello匹配hello和其他內(nèi)容。

另一類正則表達式使用某些特殊結(jié)構(gòu),以便它們能夠匹配多個字符串。例如,正則表達式“hello|world“包含 |,匹配hello或world。

作為一個更復(fù)雜的例子,正則表達式B[an]*s匹配任何字符串Bananas、Baaaaas、Bs和任何以B開頭的字符串,以s結(jié)尾,中間包含任意數(shù)量的a或n字符。

REGEXP操作符的正則表達式可以使用下列任何特殊字符和構(gòu)造:

  • ^

匹配字符串的開頭

mysql> SELECT 'fo\nfo' REGEXP '^fo$';                   -> 0
mysql> SELECT 'fofo' REGEXP '^fo';                      -> 1
  • $

匹配字符串結(jié)尾

mysql> SELECT 'fo\no' REGEXP '^fo\no$';                 -> 1
mysql> SELECT 'fo\no' REGEXP '^fo$';                    -> 0
  • .

匹配任意字符(包括會車,換行)

mysql> SELECT 'fofo' REGEXP '^f.*$';                    -> 1
mysql> SELECT 'fo\r\nfo' REGEXP '^f.*$';                -> 1
  • a*

匹配任意一個或者多個字符

mysql> SELECT 'Ban' REGEXP '^Ba*n';                     -> 1
mysql> SELECT 'Baaan' REGEXP '^Ba*n';                   -> 1
mysql> SELECT 'Bn' REGEXP '^Ba*n';                      -> 1
  • a+

匹配任意一個或者多個字符

mysql> SELECT 'Ban' REGEXP '^Ba+n';                     -> 1
mysql> SELECT 'Bn' REGEXP '^Ba+n';                      -> 0
  • a?

匹配0或1個字符。

mysql> SELECT 'Bn' REGEXP '^Ba?n';                      -> 1
mysql> SELECT 'Ban' REGEXP '^Ba?n';                     -> 1
mysql> SELECT 'Baan' REGEXP '^Ba?n';                    -> 0
  • de|abc

交替; 匹配序列de或abc。

mysql> SELECT 'pi' REGEXP 'pi|apa';                     -> 1
mysql> SELECT 'axe' REGEXP 'pi|apa';                    -> 0
mysql> SELECT 'apa' REGEXP 'pi|apa';                    -> 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -> 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -> 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -> 0
  • (abc)*

匹配0或多個序列abc的實例。

mysql> SELECT 'pi' REGEXP '^(pi)*$';                    -> 1
mysql> SELECT 'pip' REGEXP '^(pi)*$';                   -> 0
mysql> SELECT 'pipi' REGEXP '^(pi)*$';                  -> 1
  • {1}, {2,3}

重復(fù);{n}和{m,n}表示法提供了一種更通用的方法來編寫正則表達式,該方法可以匹配模式的前一個原子(或“塊”)的多次出現(xiàn)。m和n是整數(shù)。

* a* 
可以寫成{0}。

* a+ 
可以寫成{1}。

* a? 
可以寫成{0,1}。

更確切地說,一個{n}恰好與n個實例匹配,一個{n,}匹配n個或多個實例,一個{m,n}匹配m到n個實例的a,包含。如果給定m和n, m必須小于等于n。

m和n必須在從0到RE_DUP_MAX(默認255)的范圍內(nèi)。

mysql> SELECT 'abcde' REGEXP 'a[bcd]{2}e';              -> 0
mysql> SELECT 'abcde' REGEXP 'a[bcd]{3}e';              -> 1
mysql> SELECT 'abcde' REGEXP 'a[bcd]{1,10}e';           -> 1
  • [a-dX], [^a-dX]

匹配任何字符(或者不是,如果使用^)要么是a,b,c,d或x字的另外兩個人物之間形成一個范圍從第一個字符匹配所有字符。例如,[0-9]匹配任何十進制數(shù)字。要包含一個文字字符,它必須立即跟隨開頭的括號[。要包含一個文字字符,必須先寫或最后寫。任何沒有在[]對中定義特殊含義的字符只匹配它自己。

mysql> SELECT 'aXbc' REGEXP '[a-dXYZ]';                 -> 1
mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]$';               -> 0
mysql> SELECT 'aXbc' REGEXP '^[a-dXYZ]+$';              -> 1
mysql> SELECT 'aXbc' REGEXP '^[^a-dXYZ]+$';             -> 0
mysql> SELECT 'gheis' REGEXP '^[^a-dXYZ]+$';            -> 1
mysql> SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$';           -> 0
  • [.characters.]

在一個括號表達式中(使用[和]),匹配該排序元素的字符序列。字符要么是單個字符,要么是像newline這樣的字符名稱。

下表列出了允許的字符名稱。

下表顯示了允許的字符名稱和它們匹配的字符。對于以數(shù)字值表示的字符,值在八進制中表示。

NameCharacterNameCharacter
NUL0SOH001
STX002ETX003
EOT004ENQ005
ACK006BEL007
alert007BS010
backspace‘\b’HT011
tab‘\t’LF012
newline‘\n’VT013
vertical-tab‘\v’FF014
form-feed‘\f’CR015
carriage-return‘\r’SO016
SI017DLE020
DC1021DC2022
DC3023DC4024
NAK025SYN026
ETB027CAN030
EM031SUB032
ESC033IS4034
FS034IS3035
GS035IS2036
RS036IS1037
US037space’ ‘
exclamation-mark‘!’quotation-mark‘”’
number-sign‘#’dollar-sign‘$’
percent-sign‘%’ampersand‘&’
apostrophe‘\”left-parenthesis‘(‘
right-parenthesis‘)’asterisk‘*’
plus-sign‘+’comma‘,’
hyphen‘-‘hyphen-minus‘-‘
period‘.’full-stop‘.’
slash‘/’solidus‘/’
zero‘0’one‘1’
two‘2’three‘3’
four‘4’five‘5’
six‘6’seven‘7’
eight‘8’nine‘9’
colon‘:’semicolon‘;’
less-than-sign‘<’equals-sign‘=’
greater-than-sign‘>’question-mark‘?’
commercial-at‘@’left-square-bracket‘[‘
backslash‘\’reverse-solidus‘\’
right-square-bracket‘]’circumflex‘^’
circumflex-accent‘^’underscore‘_’
low-line‘_’grave-accent‘`’
left-brace‘{‘left-curly-bracket‘{‘
vertical-line’ right-brace ‘}’ 
right-curly-bracket‘}’tilde‘~’
DEL177  
mysql> SELECT '~' REGEXP '[[.~.]]';                     -> 1
mysql> SELECT '~' REGEXP '[[.tilde.]]';                 -> 1
  • [=character_class=]

在一個括號表達式中(使用[和]),[=character_class=]表示一個等價類。它匹配所有具有相同排序值的字符,包括它自己。例如,如果o和(+)是等價類的成員,[[=o=]], [[=(+)=]], [o(+)]都是同義詞。等價類不能用作范圍的端點。

  • [:character_class:]

在一個括號表達式中(使用[和]),[:character_class:]表示一個字符類,它匹配屬于該類的所有字符。下表列出了標(biāo)準(zhǔn)類名。這些名稱代表在ctype(3)手冊頁中定義的字符類。一個特定的地區(qū)可能提供其他類名。字符類不能用作范圍的端點。

Character Class NameMeaning
alnumAlphanumeric characters
alphaAlphabetic characters
blankWhitespace characters
cntrlControl characters
digitDigit characters
graphGraphic characters
lowerLowercase alphabetic characters
printGraphic or space characters
punctPunctuation characters
spaceSpace, tab, newline, and carriage return
upperUppercase alphabetic characters
xdigitHexadecimal digit characters
Character Class NameMeaning
mysql> SELECT 'justalnums' REGEXP '[[:alnum:]]+';       -> 1
mysql> SELECT '!!' REGEXP '[[:alnum:]]+';               -> 0
  • [[:<:]], [[:>:]]

這些標(biāo)記代表單詞的邊界。它們分別匹配單詞的開頭和結(jié)尾。一個單詞是一個單詞字符序列,它不是在前面或后面跟著單詞字符。字字符是alnum類或下劃線(_)中的字母數(shù)字字符。

mysql> SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';   -> 1
mysql> SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]';  -> 0

在正則表達式中使用一個特殊字符的文字實例,在它前面加上兩個反斜杠()字符。MySQL解析器解釋一個反斜杠,正則表達式庫解釋另一個。例如,要匹配包含特殊+字符的字符串1+2,只有以下正則表達式的最后一個是正確的:

mysql> SELECT '1+2' REGEXP '1+2';                       -> 0
mysql> SELECT '1+2' REGEXP '1\+2';                      -> 0
mysql> SELECT '1+2' REGEXP '1\\+2';                     -> 1

參考文檔:https://dev.mysql.com/doc/refman/5.7/en/regexp.html

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL5.5.21安裝配置教程(win7)

    MySQL5.5.21安裝配置教程(win7)

    這篇文章主要以圖文結(jié)合的方式介紹了Win7系統(tǒng)下安裝MySQL5.5.21的具體過程,感興趣的小伙伴們可以參考一下
    2016-06-06
  • mysql添加索引和不添加索引的區(qū)別及說明

    mysql添加索引和不添加索引的區(qū)別及說明

    這篇文章主要介紹了mysql添加索引和不添加索引的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySQL 參數(shù)相關(guān)概念及查詢更改方法

    MySQL 參數(shù)相關(guān)概念及查詢更改方法

    這篇文章主要介紹了MySQL 參數(shù)相關(guān)概念及查詢更改方法,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-09-09
  • 在MAC OS X上安裝MYSQL

    在MAC OS X上安裝MYSQL

    MAC系統(tǒng)自帶apache和php,但是沒有mysql,那么我們只好自力更生了,經(jīng)過一番研究,借鑒網(wǎng)上一位大神的文章,終于成功安裝上了mysql,這里推薦給有需要的朋友
    2014-10-10
  • MySQL中WITH用法小結(jié)

    MySQL中WITH用法小結(jié)

    WITH子句是MySQL中的一種SQL結(jié)構(gòu),本文主要介紹了MySQL中WITH用法小結(jié),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • MySQL添加索引特點及優(yōu)化問題

    MySQL添加索引特點及優(yōu)化問題

    這篇文章主要介紹了MySQL添加索引特點及優(yōu)化問題,MySQL索引的建立對于MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度,感興趣的小伙伴可以參考一下
    2022-07-07
  • 詳解Mysql 30條軍規(guī)

    詳解Mysql 30條軍規(guī)

    這篇文章主要介紹了詳解Mysql 30條軍規(guī),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • MySQL 服務(wù)器參數(shù)說明及查看 設(shè)置方法

    MySQL 服務(wù)器參數(shù)說明及查看 設(shè)置方法

    MySQL 服務(wù)器參數(shù)說明及查看,設(shè)置方法,對于mysql不是很熟悉的朋友,可以參考下。
    2009-03-03
  • MySQL 處理重復(fù)數(shù)據(jù)的方法(防止、刪除)

    MySQL 處理重復(fù)數(shù)據(jù)的方法(防止、刪除)

    這篇文章主要介紹了MySQL 處理重復(fù)數(shù)據(jù)的方法,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Mysql常用基準(zhǔn)測試命令總結(jié)

    Mysql常用基準(zhǔn)測試命令總結(jié)

    在本篇文章中我們給大家分享了關(guān)于Mysql常用基準(zhǔn)測試命令的總結(jié)內(nèi)容,有需要的讀者們可以學(xué)習(xí)下。
    2018-10-10

最新評論