這篇文章主要介紹了SQL Anywhere正則表達(dá)式語法與示例,需要的朋友可以參考下
正則表達(dá)式語法
通過 SIMILAR TO 和 REGEXP 搜索條件以及 REGEXP_SUBSTR 函數(shù)支持正則表達(dá)式。對于 SIMILAR TO,正則表達(dá)式語法符合 ANSI/ISO SQL 標(biāo)準(zhǔn)。對于 REGEXP 和 REGEXP_SUBSTR,正則表達(dá)式的語法和支持符合 Perl 5。
REGEXP 和 SIMILAR TO 使用正則表達(dá)式是與字符串 相匹配,而 REGEXP_SUBSTR 使用正則表達(dá)式則是與子串 相匹配。要實現(xiàn) REGEXP 和 SIMILAR TO 的子串匹配行為,可在要嘗試匹配的模式的任何一側(cè)指定通配符。例如,REGEXP '.*car.*' 會與 car、carwash 和 vicar 匹配。或者,可重寫查詢以使用 REGEXP_SUBSTR 函數(shù)。請參見REGEXP_SUBSTR 函數(shù) [String]。
通過 SIMILAR TO 匹配的正則表達(dá)式不區(qū)分大小寫,也不區(qū)分重音。REGEXP 和 REGEXP_SUBSTR 不受數(shù)據(jù)庫區(qū)分重音和大小寫的影響。請參見LIKE、REGEXP 和 SIMILAR TO:字符比較上的差異。
正則表達(dá)式:元字符
元字符是在正則表達(dá)式中具有特殊含義的符號或字符。
元字符的處理視以下情況而異:
正則表達(dá)式是與 SIMILAR TO 或 REGEXP 搜索條件一起使用,還是與 REGEXP_SUBSTR 函數(shù)一起使用
元字符是否在正則表達(dá)式的字符類的內(nèi)部
在繼續(xù)之前,應(yīng)了解字符類的定義。字符類是一組括在方括號內(nèi)的字符,將根據(jù)這組字符對字符串中的字符進(jìn)行匹配。例如,在 SIMILAR TO 'ab[1-9]' 語法中,[1-9] 就是一個字符類,它與 1 到 9 范圍中(包括 1 和 9)的某一數(shù)字匹配。正則表達(dá)式中元字符的處理方式各不相同,這取決于元字符是否被放在字符類的內(nèi)部。具體來說,當(dāng)元字符放在字符類的內(nèi)部時,多數(shù)元字符作為常規(guī)字符來處理。
對于 SIMILAR TO(僅限于 SIMILAR TO),元字符 *、?、+、_、|、(、)、{ 必須在字符類內(nèi)進(jìn)行轉(zhuǎn)義。
要在字符類中包括減號 (-)、脫字符 (^) 或直角方括號 (]) 字符,必須將字符轉(zhuǎn)義。
下面給出了所支持的正則表達(dá)式元字符的列表。當(dāng) SIMILAR TO、REGEXP 和 REGEXP_SUBSTR 使用元字符時,幾乎所有元字符的處理方式都相同:
正則表達(dá)式:特殊子字符類
子字符類 是嵌入到較大字符類中的特殊字符類。除了自定義字符類(在其中定義要匹配的字符集,例如,[abxq4]將匹配字符集限制為 a、b、x、q 和 4)以外,SQL Anywhere 還支持子字符類,例如,大部分 POSIX 字符類。例如,[[:alpha:]] 表示所有大寫和小寫字母的集合。
REGEXP 搜索條件和 REGEXP_SUBSTR 函數(shù)支持下表中的所有語法約定,但 SIMILAR TO 搜索表達(dá)式不支持。SIMILAR TO 支持的約定在 SIMILAR TO 列中有一個 Y。
在 REGEXP 中,當(dāng)使用 REGEXP_SUBSTR 函數(shù)時,可以使用脫字符對子字符類取非。例如,[[:^alpha:]] 匹配除字母字符以外的所有字符的集合。
正則表達(dá)式:斷言
斷言測試條件是否為真,并影響字符串中開始匹配的位置。斷言不返回字符;最終匹配中不包括斷言模式。REGEXP 搜索條件和 REGEXP_SUBSTR 函數(shù)支持這些斷言模式。而 SIMILAR TO 搜索表達(dá)式不支持這些約定。
在嘗試拆分字符串時,lookahead 和 lookbehind 斷言對于 REGEXP_SUBSTR 將非常有用。例如,您可以通過執(zhí)行以下語句返回 Customers 表的 Address 列中街道名稱(不帶街道編號)的列表:
SELECT REGEXP_SUBSTR( Street, '(?<=^\\S+\\s+).*$' )
FROM Customers;
另一個示例:假定您想要使用正則表達(dá)式來驗證口令是否符合某些規(guī)則。您可以使用類似于下面內(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)滿足以下條件時,口令有效:
password 至少有一位數(shù)(零寬度肯定斷言 [[:digit:]])
password 至少有兩個字母字符(零寬度肯定斷言 [[:alpha:]].*[[:alpha:]])
password 只含有字母數(shù)字字符或下劃線字符 ([[:word:]])
password 最少含有 4 個字符,最多含有 12 個字符 ({4,12})
下表包含 SQL Anywhere 支持的斷言:
正則表達(dá)式示例
下表顯示正則表達(dá)式的使用示例。所有示例都適用于 REGEXP,部分示例也適用于 SIMILAR TO(如[示例]列中注釋)。結(jié)果視您用于搜索的搜索條件而異。對于使用 SIMILAR TO 的示例,結(jié)果還要另外根據(jù)是否區(qū)分大小寫和重音而異。
有關(guān) REGEXP 和 SIMILAR TO 如何處理匹配和計算范圍的比較,請參見LIKE、REGEXP 和 SIMILAR TO 搜索條件。
請注意,如果在文字字符串中使用這些示例(例如,'.+@.+\\..+'),則應(yīng)使用雙反斜線
到此這篇關(guān)于SQL Anywhere正則表達(dá)式語法與示例的文章就介紹到這了,更多相關(guān)SQL Anywhere正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
來源:腳本之家
鏈接:https://www.jb51.net/article/184178.htm
申請創(chuàng)業(yè)報道,分享創(chuàng)業(yè)好點子。點擊此處,共同探討創(chuàng)業(yè)新機(jī)遇!