參考http://www.php100.com/manual/PostgreSQL8/functions-matching.html
LIKE
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 模式匹配總是覆蓋整個字串。 要匹配在字串內部任何位置的序列,該模式必須以百分號開頭和結尾。
LIKE運算符也可以匹配指定的字符串,但與~不同,LIKE匹配的字符串如果在文本中間出現,則找不到它,相應的行也不會返回。而~在文本進行匹配,如果被匹配的字符串在文本中出現,~將會找到它,相應的行會被返回。
Table 正則表達式匹配操作符(注意:~相當於like)
| 操作符 | 描述 | 例子 |
|---|---|---|
| ~ | 匹配正則表達式,大小寫相關 | 'thomas' ~ '.*thomas.*' |
| ~* | 匹配正則表達式,大小寫無關 | 'thomas' ~* '.*Thomas.*' |
| !~ | 不匹配正則表達式,大小寫相關 | 'thomas' !~ '.*Thomas.*' |
| !~* | 不匹配正則表達式,大小寫無關 | 'thomas' !~* '.*vadim.*' |
正則表達式量詞
| 量詞 | 匹配 |
|---|---|
| * | 一個匹配 0 或者更多個原子的序列 |
| + | 一個匹配 1 或者更多個原子的序列 |
| ? | 一個匹配 0 個或者 1 個原子的序列 |
| {m} | 一個正好匹配 m 個原子的序列 |
| {m,} | 一個匹配m 個或者更多原子的序列 |
| {m,n} | 一個匹配 m 到 n 個(包含兩端) 原子的序列;m 不能比 n 大 |
| *? | * 的非貪婪模式 |
| +? | + 的非貪婪模式 |
| ?? | ? 的非貪婪模式 |
| {m}? | {m} 的非貪婪模式 |
| {m,}? | {m,} 的非貪婪模式 |
| {m,n}? | {m,n} 的非貪婪模式 |
{...} 的形式被稱作范圍。 一個范圍內的數字 m 和 n 都是無符號十進制整數, 允許的數值從 0 到 255(閉區間)。
正則表達式約束
| 約束 | 描述 |
|---|---|
| ^ | 匹配字串的開頭 |
| $ | 匹配字串的結尾 |
| (?=re) | 正前瞻 匹配任何匹配 re 的 子字串起始點(只在 ARE 中有) |
| (?!re) | 負前瞻 匹配任何不匹配 re 的子字串的起始點。(只在 ARE 中有) |
