字符 | 其它信息 |
---|---|
[ 和 ] | 左右方括號(hào)用于指定字符類(lèi)。字符類(lèi)是進(jìn)行匹配時(shí)所要依據(jù)的一組字符。
除連字符 (-) 和脫字符 (^) 外,在字符類(lèi)中指定的元字符和量詞(如 * 和 {m},分別為元字符和量詞)沒(méi)有特殊意義,可當(dāng)作實(shí)際字符進(jìn)行運(yùn)算。 SQL Anywhere 還支持子字符類(lèi),例如 POSIX 字符類(lèi)。請(qǐng)參見(jiàn)正則表達(dá)式:特殊子字符類(lèi)。 |
* | 星號(hào)可用于與字符匹配 0 次或多次。例如,REGEXP '.*abc' 匹配的字符串以 abc 結(jié)尾并以任何前綴開(kāi)頭。因此,aabc、xyzabc 和 abc 匹配,但 bc 和 abcc 則不匹配。 |
? | 問(wèn)號(hào)可用于與字符匹配 0 次或 1 次。例如,'colou?r' 匹配 color 和 colour。 |
+ | 加號(hào)可用于與字符匹配 1 次或多次。例如,'bre+' 匹配 bre 和 bree,但不匹配 br。 |
- | 可以在字符類(lèi)中使用一個(gè)連字符來(lái)表示一個(gè)范圍。例如,REGEXP '[a-e]' 匹配 a、b、c、d 和 e。
有關(guān) REGEXP 和 SIMILAR TO 如何對(duì)范圍求值的詳細(xì)信息,請(qǐng)參見(jiàn)LIKE、REGEXP 和 SIMILAR TO:字符比較上的差異。 |
% | 百分號(hào)可與 SIMILAR TO 配合使用來(lái)匹配任意數(shù)目的字符。
不將百分號(hào)視為 REGEXP 和 REGEXP_SUBSTR 所使用的元字符。當(dāng)指定時(shí),它匹配百分號(hào) (%)。 |
_(下劃線字符) | 可將下劃線與 SIMILAR TO 配合使用來(lái)匹配單個(gè)字符。
不將下劃線視為 REGEXP 和 REGEXP_SUBSTR 所使用的元字符。當(dāng)指定時(shí),它匹配下劃線 (_)。 |
| | 管道符號(hào)用于指定匹配字符串時(shí)要使用的替代模式。在由豎線分隔的一行模式中,豎線被解釋為 OR,匹配過(guò)程從最左側(cè)的模式開(kāi)始,在找到第一個(gè)匹配項(xiàng)時(shí)停止。因此,您應(yīng)按優(yōu)先級(jí)的降序順序列出模式。您可以指定任意數(shù)量的替代模式。 |
( 和 ) | 當(dāng)左括號(hào)和右括號(hào)用于正則表達(dá)式的各個(gè)組合部分時(shí),它們?yōu)樵址@纾?code>(ab)* 匹配零個(gè)或多個(gè) ab 的重復(fù)項(xiàng)。與使用數(shù)學(xué)表達(dá)式一樣,您使用組合來(lái)控制正則表達(dá)式各部分的計(jì)算順序。 |
{ 和 } | 當(dāng)左大括號(hào)和右大括號(hào)用于指定量詞時(shí),它們?yōu)樵址A吭~指定一個(gè)模式要構(gòu)成某個(gè)匹配所必須重復(fù)的次數(shù)。例如:
|
\ | 反斜線被用作元字符的轉(zhuǎn)義字符。它也可被用于轉(zhuǎn)義非元字符。 |
^ | 對(duì)于 REGEXP 和 REGEXP_SUBSTR,當(dāng)脫字符在字符類(lèi)的外部時(shí),脫字符匹配字符串的開(kāi)頭字符。例如,'^[hc]at' 匹配 hat 和 cat,但只在字符串的開(kāi)頭。
當(dāng)用在字符類(lèi)內(nèi)部時(shí),以下行為適用:
|
$ | 當(dāng)與 REGEXP 和 REGEXP_SUBSTR 一起使用時(shí),匹配字符串的結(jié)尾字符。例如,SIMILAR TO 'cat$' 匹配 cat,但不匹配 catfish。
當(dāng)與 SIMILAR TO 一起使用時(shí),它匹配問(wèn)號(hào)。 |
. | 當(dāng)與 REGEXP 和 REGEXP_SUBSTR 一起使用時(shí),匹配任何單個(gè)字符。例如,REGEXP 'a.cd' 匹配以 a 開(kāi)頭并以 cd 結(jié)尾的含有四個(gè)字符的任何字符串。
當(dāng)與 SIMILAR TO 一起使用時(shí),它匹配句點(diǎn) (.)。 |
: | 在字符集中使用冒號(hào)來(lái)指定子字符類(lèi)。例如,'[[:alnum:]]' 。 |
子字符類(lèi)是嵌入到較大字符類(lèi)中的特殊字符類(lèi)。除了自定義字符類(lèi)(在其中定義要匹配的字符集,例如,[abxq4]
將匹配字符集限制為 a、b、x、q 和 4)以外,SQL Anywhere 還支持子字符類(lèi),例如,大部分 POSIX 字符類(lèi)。例如,[[:alpha:]]
表示所有大寫(xiě)和小寫(xiě)字母的集合。
REGEXP 搜索條件和 REGEXP_SUBSTR 函數(shù)支持下表中的所有語(yǔ)法約定,但 SIMILAR TO 搜索表達(dá)式不支持。SIMILAR TO 支持的約定在 SIMILAR TO 列中有一個(gè) Y。
在 REGEXP 中,當(dāng)使用 REGEXP_SUBSTR 函數(shù)時(shí),可以使用脫字符對(duì)子字符類(lèi)取非。例如,[[:^alpha:]]
匹配除字母字符以外的所有字符的集合。
子字符類(lèi) | 其它信息 | SIMILAR TO | ||
---|---|---|---|---|
[:alpha:] | 匹配當(dāng)前歸類(lèi)中的大寫(xiě)和小寫(xiě)字母字符。例如,'[0-9]{3}[[:alpha:]]{2}' 匹配三個(gè)數(shù)字,后跟兩個(gè)字母。 |
Y | ||
[:alnum:] | 匹配當(dāng)前歸類(lèi)中的數(shù)字、大寫(xiě)和小寫(xiě)字母字符。例如,'[[:alnum:]]+' 匹配含有一個(gè)或多個(gè)字母和數(shù)字的字符串。 |
Y | ||
[:digit:] | 匹配當(dāng)前歸類(lèi)中的數(shù)字。例如,'[[:digit:]-]+' 匹配含有一個(gè)或多個(gè)數(shù)字或橫線的字符串。同樣,'[^[:digit:]-]+' 匹配含有一個(gè)或多個(gè)不是數(shù)字或橫線的字符的字符串。 |
Y | ||
[:lower:] | 匹配當(dāng)前歸類(lèi)中的小寫(xiě)字母字符。例如,'[[:lower:]]' 不匹配 A,因?yàn)?A 為大寫(xiě)。 |
Y | ||
[:space:] | 匹配單個(gè)空格 (' ')。例如,以下語(yǔ)句搜索 Contacts.City 以查找任何名稱(chēng)為兩個(gè)詞的城市:
|
Y | ||
[:upper:] | 匹配當(dāng)前歸類(lèi)中的大寫(xiě)字母字符。例如,'[[:upper:]ab]' 與以下其中一項(xiàng)匹配:任何大寫(xiě)字母、a 或 b。 |
Y | ||
[:whitespace:] | 匹配一個(gè)空白字符,例如,空格、制表符、換頁(yè)符和回車(chē)符。 | Y | ||
[:ascii:] | 匹配任何七位的 ASCII 字符(0 到 127 之間的順序值)。 | |||
[:blank:] | 匹配一個(gè)空白區(qū)或水平制表符。
|
|||
[:cntrl:] | 匹配順序值小于 32 或字符值為 127 的 ASCII 字符(控制字符)。控制字符包括換行符、換頁(yè)符、退格符,等等。 | |||
[:graph:] | 匹配打印字符。
|
|||
[:print:] | 匹配打印字符和空格。
|
|||
[:punct:] | 匹配其中一個(gè)字符: !"#$%'()*+,-./:;=>?@[\]^_`{|}~.
|
|||
[:word:] | 匹配當(dāng)前歸類(lèi)中的字母、數(shù)字或下劃線字符。
|
|||
[:xdigit:] | 匹配字符類(lèi) [0-9A-Fa-f] 中的字符。 |
REGEXP 搜索條件和 REGEXP_SUBSTR 函數(shù)支持以下語(yǔ)法約定,同時(shí)它們假定反斜線為轉(zhuǎn)義字符。而 SIMILAR TO 搜索表達(dá)式不支持這些約定。
正則表達(dá)式語(yǔ)法 | 名稱(chēng)和含義 | ||
---|---|---|---|
\0xxx | 匹配值為 \0xxx 的字符,其中 xxx 是任何八進(jìn)制數(shù)字序列,0 是零。例如,\0134 匹配反斜線。 |
||
\a | 匹配報(bào)警字符。 | ||
\A | 用在字符集外部以便匹配字符串的開(kāi)頭。
等效于在字符集外部使用的 |
||
\b | 匹配退格字符。 | ||
\B | 匹配反斜線字符 (\)。 | ||
\cX | 匹配已命名的控制字符。例如,\cZ 代表 ctrl-Z。 | ||
\d | 匹配當(dāng)前歸類(lèi)中的一個(gè)數(shù)字。例如,以下語(yǔ)句搜索 Contacts.Phone 以查找以 00 結(jié)尾的所有電話號(hào)碼:
\d 既可用在字符類(lèi)的內(nèi)部也可用在字符類(lèi)的外部,等效于 |
||
\D | 匹配數(shù)字以外的任何字符。它的作用與 \d 正好相反。
\D 既可用在字符類(lèi)的內(nèi)部也可用在字符類(lèi)的外部,等效于 在方括號(hào)內(nèi)使用取非速記時(shí)請(qǐng)務(wù)必謹(jǐn)慎。 |
||
\e | 匹配轉(zhuǎn)義字符。 | ||
\E | 將由 \Q 啟動(dòng)的將元字符視為非元字符這一功能停止。
有關(guān)正則表達(dá)式元字符的列表,請(qǐng)參見(jiàn)正則表達(dá)式:元字符。 |
||
\f | 匹配換頁(yè)符。 | ||
\n | 匹配換行符。 | ||
\Q | 將所有元字符視為非元字符,直到遇到 \E。例如,\Q[$\E 等效于 \[\$ 。
有關(guān)正則表達(dá)式元字符的列表,請(qǐng)參見(jiàn)正則表達(dá)式:元字符。 |
||
\r | 匹配回車(chē)符。 | ||
\s | 匹配一個(gè)被視為白空格的空格或字符。例如,以下語(yǔ)句從 Products.ProductName 中返回名稱(chēng)中至少有一個(gè)空格的所有產(chǎn)品名:
\s 既可用在字符類(lèi)的內(nèi)部也可用在字符類(lèi)的外部,等效于 |
||
\S | 匹配非白空格字符。它的作用與 \d 正好相反,而等效于 [^[:whitespace:]] 。
\S 既可用在字符類(lèi)的內(nèi)部也可用在字符類(lèi)的外部。請(qǐng)參見(jiàn)正則表達(dá)式:特殊子字符類(lèi)。 在方括號(hào)內(nèi)使用取非速記時(shí)請(qǐng)務(wù)必謹(jǐn)慎。 |
||
\t | 匹配水平制表符。 | ||
\v | 匹配垂直制表符。 | ||
\w | 匹配當(dāng)前歸類(lèi)中的字母字符、數(shù)字或下劃線。例如,以下語(yǔ)句從 Contacts.Surname 返回長(zhǎng)度正好為七個(gè)字母數(shù)字字符的所有姓:
\w 既可用在字符類(lèi)的內(nèi)部也可用在字符類(lèi)的外部。請(qǐng)參見(jiàn)正則表達(dá)式:特殊子字符類(lèi)。 等效于 |
||
\W | 匹配當(dāng)前歸類(lèi)中字母字符、數(shù)字或下劃線以外的任何字符。它的作用與 \w 正好相反,而等效于 [^[:alnum:]_] 。
在字符類(lèi)的內(nèi)部和外部都可使用此正則表達(dá)式。請(qǐng)參見(jiàn)正則表達(dá)式:特殊子字符類(lèi)。 |
||
\xhh | 匹配值為 0xhh 的字符,其中 hh 最多為兩個(gè)十六進(jìn)制數(shù)字。例如,\x2D 等效于一個(gè)連字符。
等效于 \x{hh}。 |
||
\x{hhh} | 匹配值為 0xhhh 的字符,其中 hhh 最多為三個(gè)十六進(jìn)制數(shù)字。 | ||
\z 和 \Z | 匹配字符串結(jié)尾處的位置(而非字符)。
等效于 |
斷言測(cè)試條件是否為真,并影響字符串中開(kāi)始匹配的位置。斷言不返回字符;最終匹配中不包括斷言模式。REGEXP 搜索條件和 REGEXP_SUBSTR 函數(shù)支持這些斷言模式。而 SIMILAR TO 搜索表達(dá)式不支持這些約定。
在嘗試拆分字符串時(shí),lookahead 和 lookbehind 斷言對(duì)于 REGEXP_SUBSTR 將非常有用。例如,您可以通過(guò)執(zhí)行以下語(yǔ)句返回 Customers 表的 Address 列中街道名稱(chēng)(不帶街道編號(hào))的列表:
SELECT REGEXP_SUBSTR( Street, '(?=^\\S+\\s+).*$' ) FROM Customers; |
另一個(gè)示例:假定您想要使用正則表達(dá)式來(lái)驗(yàn)證口令是否符合某些規(guī)則。您可以使用類(lèi)似于下面內(nèi)容的零寬度斷言:
IF password REGEXP '(?=.*[[:digit:]])(?=.*[[:alpha:]].*[[:alpha:]])[[:word:]]{4,12}' MESSAGE 'Password conforms' TO CLIENT; ELSE MESSAGE 'Password does not conform' TO CLIENT; END IF |
當(dāng)滿(mǎn)足以下條件時(shí),口令有效:
password 至少有一位數(shù)(零寬度肯定斷言 [[:digit:]])
password 至少有兩個(gè)字母字符(零寬度肯定斷言 [[:alpha:]].*[[:alpha:]])
password 只含有字母數(shù)字字符或下劃線字符 ([[:word:]])
password 最少含有 4 個(gè)字符,最多含有 12 個(gè)字符 ({4,12})
下表包含 SQL Anywhere 支持的斷言:
語(yǔ)法 | 含義 |
---|---|
(?=pattern) | 肯定的 lookahead 零寬度斷言 查看字符串中的當(dāng)前位置是否緊跟著出現(xiàn)了 pattern,而 pattern 不會(huì)成為匹配字符串的一部分。'A(?=B)' 匹配后面跟有 B 的 A,但不使 B 成為匹配的一部分。
例如, |
(?!pattern) | 否定的 lookahead 零寬度斷言 查看字符串中的當(dāng)前位置是否沒(méi)有 緊跟著出現(xiàn) pattern,而 pattern 不會(huì)成為匹配字符串的一部分。所以,'A(?!B)' 匹配后面未跟著 B 的 A。
例如, |
(?=pattern) | 肯定的 lookbehind 零寬度斷言 查看字符串中的當(dāng)前位置是否前面緊挨著出現(xiàn)了 pattern,而 pattern 不會(huì)成為匹配字符串的一部分。所以,'(?=A)B' 匹配前面緊挨著 A 的 B,但不使 A 成為匹配的一部分。
例如, |
(?!pattern) | 否定的 lookbehind 零寬度斷言 查看字符串中的當(dāng)前位置的前面是否沒(méi)有 緊挨著出現(xiàn) pattern,而 pattern 不會(huì)成為匹配字符串的一部分。
例如, |
(?>pattern) | 所屬關(guān)系局部子表達(dá)式 僅匹配與 pattern 匹配的剩余字符串的最大前綴。
例如,在 |
(?:pattern) | 非捕獲塊 該語(yǔ)法在功能上就等效于 pattern,是為實(shí)現(xiàn)兼容性而提供。
例如,在 同樣, |
(?#text) | 用于注釋。text 的內(nèi)容會(huì)被忽略。 |
正則表達(dá)式示例
下表顯示正則表達(dá)式的使用示例。所有示例都適用于 REGEXP,部分示例也適用于 SIMILAR TO(如[示例]列中注釋?zhuān)=Y(jié)果視您用于搜索的搜索條件而異。對(duì)于使用 SIMILAR TO 的示例,結(jié)果還要另外根據(jù)是否區(qū)分大小寫(xiě)和重音而異。
有關(guān) REGEXP 和 SIMILAR TO 如何處理匹配和計(jì)算范圍的比較,請(qǐng)參見(jiàn)LIKE、REGEXP 和 SIMILAR TO 搜索條件。
請(qǐng)注意,如果在文字字符串中使用這些示例(例如,'.+@.+\\..+'
),則應(yīng)使用雙反斜線
示例 | 匹配示例 |
---|---|
信用卡號(hào)(僅限 REGEXP):
Visa:
MasterCard:
American Express:
Discover:
|
匹配 (Visa): 4123 6453 2222 1746
非匹配 (Visa): 3124 5675 4400 4567, 4123-6453-2222-1746 同樣,MasterCard 匹配一組 16 位的號(hào)碼,以 5 開(kāi)頭,每四位號(hào)碼組成的子集之間各有一個(gè)空格。American Express 和 Discover 是相同的,但是必須分別以 37 和 6011 開(kāi)頭。 |
日期(REGEXP 和 SIMILAR TO 均適用):
|
匹配: 31/04/1999, 15/12/4567
非匹配: 31/4/1999, 31/4/99, 1999/04/19, 42/67/25456 |
Windows 絕對(duì)路徑(僅限 REGEXP):
|
匹配:\\server\share\file
非匹配:\directory\directory2, /directory2 |
電子郵件地址(僅限 REGEXP):
|
匹配:abc.123@def456.com, _123@abc.ca
非匹配:abc@dummy, ab*cd@efg.hijkl |
電子郵件地址(僅限 REGEXP):
|
匹配:*@qrstuv@wxyz.12345.com, __1234^%@@abc.def.ghijkl
非匹配:abc.123.*ca, ^%abcdefg123 |
HTML 十六進(jìn)制顏色代碼(REGEXP 和 SIMILAR TO 均適用):
|
匹配:AB1234, CCCCCC, 12AF3B
非匹配:123G45, 12-44-CC |
HTML 十六進(jìn)制顏色代碼(僅限 REGEXP):
|
匹配:AB 11 00, CC 12 D3
非匹配:SS AB CD, AA BB CC DD, 1223AB |
IP 地址(僅限 REGEXP):
|
匹配: 10.25.101.216
非匹配: 0.0.0, 256.89.457.02 |
Java 注釋?zhuān)▋H限 REGEXP):
|
匹配位于 /* 和 */ 之間的 Java 注釋?zhuān)蛘咔熬Y為 // 的一行注釋。
非匹配:a=1 |
貨幣(僅限 REGEXP):
|
匹配: $1.00, -$97.65
非匹配: $1, 1.00$, $-75.17 |
正數(shù)、負(fù)數(shù)和小數(shù)值(僅限 REGEXP):
|
匹配: +41, -412, 2, 7968412, 41, +41.1, -3.141592653
非匹配: ++41, 41.1.19, -+97.14 |
口令(REGEXP 和 SIMILAR TO 均適用):
|
匹配:abcd, 1234, A1b2C3d4, 1a2B3
非匹配:abc, *ab12, abcdefghijkl |
口令(僅限 REGEXP):
|
匹配:AB_cd, A1_b2c3, a123_
非匹配:*^g, abc, 1bcd |
電話號(hào)碼(REGEXP 和 SIMILAR TO 均適用):
|
匹配: 519-883-6898, 519 888 6898
非匹配: 888 6898, 5198886898, 519 883-6898 |
句子(僅限 REGEXP):
|
匹配:Hello, how are you?
非匹配:i am fine |
句子(僅限 REGEXP):
|
匹配:Hello, how are you?
非匹配:i am fine |
社保號(hào)碼(REGEXP 和 SIMILAR TO 均適用):
|
匹配: 123-45-6789
非匹配:123 45 6789, 123456789, 1234-56-7891 |
URL(僅限 REGEXP):
|
匹配:http://www.sample.com、www.sample.com
非匹配:http://sample.com, http://www.sample.comm |
到此這篇關(guān)于SQL Anywhere正則表達(dá)式語(yǔ)法與示例的文章就介紹到這了,更多相關(guān)SQL Anywhere正則表達(dá)式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
標(biāo)簽:哈密 涼山 常州 海口 泰安 本溪 湖州 大興安嶺
巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《SQL Anywhere正則表達(dá)式語(yǔ)法與示例》,本文關(guān)鍵詞 SQL,Anywhere,正則,表達(dá)式,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。