postgresql的匹配模式

2021-09-20 13:53:19 字數 2690 閱讀 6412

string like pattern [escape escape-character]

string not like pattern [escape escape-character]

每個 pattern 定義乙個字串的集合。如果該 string 包含在 pattern 代表的字串集合裡,那麼like表示式返回真。和我們想像的一樣,如果like返回真,那麼not like表示式將返回假,反之亦然。乙個等效的表示式是 not (string like pattern) 。

如果 pattern 不包含百分號或者下劃線,那麼該模式只代表它本身;這時候like的行為就像等號操作符。在 pattern 裡的下劃線(_)匹配任何單個字元;而乙個百分號(%)匹配零或多個任何字元。

一些例子:

'abc' like 'abc'    true

'abc' like 'a%' true

'abc' like '_b_' true

'abc' like 'c' false

like模式匹配總是覆蓋整個字串。要匹配在字串內部任何位置的序列,該模式必須以百分號開頭和結尾。

要匹配下劃線或者百分號本身,在 pattern 裡相應的字元必須前導逃逸字元。預設的逃逸字元是反斜槓,但是你可以用 escape 子句指定乙個。要匹配逃逸字元本身,寫兩個逃逸字元。

請注意反斜槓在字串文字裡已經有特殊含義了,所以如果你寫乙個包含反斜槓的模式常量,那你就要在 sql 語句裡寫兩個反斜槓。因此,寫乙個匹配單個反斜槓的模式實際上要在語句裡寫四個反斜槓。你可以通過用 escape 選擇乙個不同的逃逸字元來避免這樣;這樣反斜槓就不再是like的特殊字元了。但仍然是字元文字分析器的特殊字元,所以你還是需要兩個反斜槓。

我們也可以通過寫成 escape '' 的方式關閉逃逸機制,這時,我們就不能關閉下劃線和百分號的特殊含義。

關鍵字 ilike 可以用於替換 like ,令該匹配就當前的區域設定是大小寫無關的。這個特性不是 sql 標準,是 postgresql 擴充套件。

操作符 ~~ 等效於like,而 ~~* 等效於ilike。還有 !~~ 和 !~~* 操作符分別代表not likenot ilike。所有這些操作符都是 postgresql 特有的.

例子: 查詢資料庫中表的名字(查詢以tbl_開頭的表的名字)

select tablename from pg_tables where tablename like 'tbl!_%'escape '!';

利用escape轉義: 上面的sql語句中就是將!作為轉義字元,作用是將"_"轉換成普通的"_"

string similar to pattern [escape escape-character]

string not similar to pattern [escape escape-character]

similar to根據自己的模式是否匹配給定字串而返回真或者假。它和like非常類似,只不過它使用 sql 標準定義的正規表示式理解模式。sql 標準的正規表示式是在like表示法和普通的正規表示式表示法之間古怪的交叉。

類似likesimilar to操作符只有在它的模式匹配整個字串的時候才能成功;這一點和普通的正規表示式的習慣不同,在普通的正規表示式裡,模式匹配字串的任意部分。和like類似的地方還有similar to使用 _ 和 % 分別匹配單個字元和任意字串(這些和 posix 正規表示式裡的 . 和 .* 相容)。

除了這些從like借用的功能之外,similar to支援下面這些從 posix 正規表示式借用的模式匹配元字元:

請注意沒有提供範圍重複(? 和 ),儘管它們在 posix 裡有。同時,點(.)不是元字元。

like一樣,反斜槓關閉所有這些元字元的特殊含義;當然我們也可以用 escape 宣告另外乙個逃逸字元。

一些例子:

'abc' similar to 'abc'      true

'abc' similar to 'a' false

'abc' similar to '%(b|d)%' true

'abc' similar to '(b|c)%' false

帶三個引數的substring(string from pattern for escape-character)函式提供了乙個從字串中抽取乙個匹配 sql 正規表示式模式的子字串功能。和 similar to 一樣,宣告的模式必須匹配整個字串,否則函式失效並返回 null 。為了標識在成功的時候應該返回的模式部分,模式必須出現後跟雙引號(")的兩個逃逸字元。匹配這兩個標記之間的模式的字串將被返回。

一些例子:

substring('foobar' from '%#"o_b#"%' for '#')   oob

substring('foobar' from '#"o_b#"%' for '#') null

正規表示式:

模式匹配 關於模式匹配的演算法實現2

參照我上篇部落格,只不過多了乙個識別率的演算法而已,還是參考歸併排序寫的,很簡單。上篇部落格位址 很多的解釋都在 裡面了,各位看看就明白了 author seen time 2015 09 20 include include include using namespace std struct p...

簡單模式匹配演算法 串的模式匹配

一 對乙個串中的某子串的定位操作稱為串的模式匹配 二 模式串 待定位的子串 三 基本思想 從主串中的第乙個位置起和模式串的第乙個字元開始比較 如果相等,則繼續比較後續字元 如果不等,則從主串的第二個字元起,重新用上一步的方法與模式串中的字元作比較 以此類推,直到比較完模式串的所有字元,則匹配成功,返...

串的模式匹配

最近在學 vc include stdafx.h include include define max size 1000 串的模式匹配 功能 找出str2字串在str1字串中第一次出現的位置 不包括串結束符 返回 該位置的序號 環境 visual c 2008 注意 1.此為樸素的模式匹配演算法,...