匹配特殊字符
正則表達式語言由具有特定含義的特殊字符構成。我們已經看到.、[]、|和-等,還有其他一些字符。請問,如果你需要匹配這些字符,應該怎么辦呢?例如,如果要找出包含.字符的值,怎樣搜索?請看下面的例子:
輸入:
select?vend_name?from?vendors?where?venr_name?regexp?'.’?order?by?vend_name;
輸出:
分析:這并不是期望的輸出,.匹配任意字符,因此每個行都被檢索出來。
為了匹配特殊字符,必須用為前導。-表示查找-,.表示查找.。
也用來引用元字符(具有特殊含義的字符),如下表
注意:為了匹配反斜杠()字符本身,需要使用。
匹配字符類
存在找出你自己經常使用的數字、所有字母符或所有數字字母字符等的匹配。為更方便工作,可以使用預定義的字符集,成為字符類。下表列出字符類以及他們的含義。
匹配多個實例
目前為止使用的所有正則表達式都試圖匹配單次出現。如果存在一個匹配,該行被檢索出來,如果不存在,檢所不出任何行。但是有時需要對匹配的數目進行更強的控制。例如,你可能需要尋找所有的數,不管數中包含多少數字,或者你可能想尋找的一個單詞并且還能夠適應一個尾隨的s(如果存在),等等。
這個可以用下表列出的正則表達式重復元字符來完成。
下面舉個例子:
輸入:
select?prod_name?from?products?where?prod_name?regexp?'([0-9]?sticks?)’?order?by?prod_name;
輸出:
分析:正則表達式([0-9] sticks?)需要解說下。(匹配),[0-9]匹配任意數字(這個例子中為1和5), sticks?匹配 stick和 sticks(s后的?使s可選,因為?匹配它前面的任何字符的0次或1次出現),)匹配。沒有?,匹配 stick和 sticks會非常困難。
定位符
目前為止的所有例子都是匹配一個串中任意為止的文本。為了匹配特定位置的文本,需要使用下表列出的定位符:
例如,如果你想找出以一個數(包括以小數點開始的數)開始的所有產品,怎么辦?簡單搜索[0-9.](或[[:digit:].])不行,因為它將在文本內任意位置查找匹配。解決辦法是^定位符,如下所示:
輸入:
select?prod_name?from?products?where?prod_name?regexp?'^[0-9.]'?order?by?prod_name;
輸出:
分析:^匹配串的開始。因此,^[0-9.]只在.或任意數字為串中第一個字符時才匹配它們。沒有^,則還要多檢索出4個別的行。
【相關推薦】