程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 使用正規表達式編寫更好的SQL

使用正規表達式編寫更好的SQL

編輯:關於MYSQL數據庫

Oracle Database 10g 的一個新特性大大提高了您搜索和處理字符數據的能力。這個特性就是正規表達式,是一種用來描述文本模式的表示方法。很久以來它已在許多編程語言和大量 UNIX 實用工具中出現過了。

Oracle 的正規表達式的實施是以各種 SQL 函數和一個 WHERE 子句操作符的形式出現的。如果您不熟悉正規表達式,那麼這篇文章可以讓您了解一下這種新的極其強大然而表面上有點神秘的功能。已經對正規表達式很熟悉的讀者可以了解如何在 Oracle SQL 語言的環境中應用這種功能。

什麼是正規表達式?

正規表達式由一個或多個字符型文字和/或元字符組成。在最簡單的格式下,正規表達式僅由字符文字組成,如正規表達式 cat。它被讀作字母 c,接著是字母 a 和 t,這種模式匹配 cat、location 和 catalog 之類的字符串。元字符提供算法來確定 Oracle 如何處理組成一個正規表達式的字符。當您了解了各種元字符的含義時,您將體會到正規表達式用於查找和替換特定的文本數據是非常強大的。

驗證數據、識別重復關鍵字的出現、檢測不必要的空格,或分析字符串只是正規表達式的許多應用中的一部分。您可以用它們來驗證電話號碼、郵政編碼、電子郵件地址、社會安全號碼、IP 地址、文件名和路徑名等的格式。此外,您可以查找如 Html 標記、數字、日期之類的模式,或任意文本數據中符合任意模式的任何事物,並用其它的模式來替換它們。

用 Oracle Database 10g 使用正規表達式

您可以使用最新引進的 Oracle SQL REGEXP_LIKE 操作符和 REGEXP_INSTR、REGEXP_SUBSTR 以及 REGEXP_REPLACE 函數來發揮正規表達式的作用。您將體會到這個新的功能如何對 LIKE 操作符和 INSTR、SUBSTR 和 REPLACE 函數進行了補充。實際上,它們類似於已有的操作符,但現在增加了強大的模式匹配功能。被搜索的數據可以是簡單的字符串或是存儲在數據庫字符列中的大量文本。正規表達式讓您能夠以一種您以前從未想過的方式來搜索、替換和驗證數據,並提供高度的靈活性。

正規表達式的基本例子

在使用這個新功能之前,您需要了解一些元字符的含義。句號 (.) 匹配一個正規表達式中的任意字符(除了換行符)。例如,正規表達式 a.b 匹配的字符串中首先包含字母 a,接著是其它任意單個字符(除了換行符),再接著是字母 b。字符串 axb、xaybx 和 abba 都與之匹配,因為在字符串中隱藏了這種模式。如果您想要精確地匹配以 a 開頭和以 b 結尾的一條三個字母的字符串,則您必須對正規表達式進行定位。脫字符號 (^) 元字符指示一行的開始,而美元符號 ($) 指示一行的結尾(參見表 1)。因此, 正規表達式 ^a.b$ 匹配字符串 aab、abb 或 axb。將這種方式與 LIKE 2ù×÷·?提供的類似的模式匹配 a_b 相比較,其中 (_) 是單字符通配符。

默認情況下,一個正規表達式中的一個單獨的字符或字符列表只匹配一次。為了指示在一個正規表達式中多次出現的一個字符,您可以使用一個量詞,它也被稱為重復操作符。.如果您想要得到從字母 a 開始並以字母 b 結束的匹配模式,則您的正規表達式看起來像這樣:^a.*b$。* 元字符重復前面的元字符 (.) 指示的匹配零次、一次或更多次。LIKE 操作符的等價的模式是 a%b,其中用百分號 (%) 來指示任意字符出現零次、一次或多次。

表 2 給出了重復操作符的完整列表。注意它包含了特殊的重復選項,它們實現了比現有的 LIKE 通配符更大的靈活性。如果您用圓括號括住一個表達式,這將有效地創建一個可以重復一定次數的子表達式。例如,正規表達式 b(an)*a 匹配 ba、bana、banana、yourbananASPlit 等。

Oracle 的正規表達式實施支持 POSIX (可移植操作系統接口)字符類,參見表 3 中列出的內容。這意味著您要查找的字符類型可以非常特別。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved