IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁(yè)數(shù)據(jù)庫(kù)Oracle → Oracle 正則表達(dá)式

Oracle 正則表達(dá)式

時(shí)間:2015-06-28 00:00:00 來(lái)源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  Oracle 10g數(shù)據(jù)庫(kù)內(nèi)建了符合IEEE POSIX (Portable Operating System for Unix)標(biāo)準(zhǔn)的正則表達(dá)式。熟練使用正則表達(dá)式,可以寫(xiě)出簡(jiǎn)潔,強(qiáng)大的SQL語(yǔ)句。

  正則表達(dá)式有幾個(gè)優(yōu)點(diǎn)優(yōu)于常見(jiàn)的LIKE操作符和INSTR、SUBSTR及REPLACE 函數(shù)的。這些傳統(tǒng)的SQL 函數(shù)不便于進(jìn)行模式匹配。只有LIKE 操作符通過(guò)使用%和_字符匹配,但LIKE不支持表達(dá)式的重復(fù)、復(fù)雜的更替、字符范圍、字符列表和POSIX 字符類等等。

  元字符(Meta Character):

  Sql代碼

  ^????? 使表達(dá)式定位至一行的開(kāi)頭

  $????? 使表達(dá)式定位至一行的末尾

  *????? 匹配 0 次或更多次

  ?????? 匹配 0 次或 1 次

  +????? 匹配 1 次或更多次

  {m}??? 正好匹配 m 次

  {m,}?? 至少匹配 m 次

  {m, n} 至少匹配 m 次但不超過(guò) n 次

  [:alpha:]??? 字母字符

  [:lower:]??? 小寫(xiě)字母字符

  [:upper:]??? 大寫(xiě)字母字符

  [:digit:]??? 數(shù)字

  [:alnum:]??? 字母數(shù)字字符

  [:space:]??? 空白字符(禁止打?。缁剀嚪?、換行符、豎直制表符和換頁(yè)符[:punct:]??? 標(biāo)點(diǎn)字符

  [:cntrl:]??? 控制字符(禁止打印)

  [:print:]??? 可打印字符 | 分隔替換選項(xiàng),通常與分組操作符 () 一起使用

  ( )??? 將子表達(dá)式分組為一個(gè)替換單元、量詞單元或后向引用單元

  [char] 字符列表

  Oracle 10g提供了四個(gè)regexp function: REGEXP_LIKE , REGEXP_REPLACE , REGEXP_INSTR , REGEXP_SUBSTR 。

  Sql代碼

  REGEXP_LIKE:比較一個(gè)字符串是否與正則表達(dá)式匹配

  (srcstr, pattern [, match_option])

  REGEXP_INSTR:在字符串中查找正則表達(dá)式,并且返回匹配的位置

  (srcstr, pattern [, position [, occurrence [, return_option [, match_option]]]])

  REGEXP_SUBSTR:返回與正則表達(dá)式匹配的子字符串

  (srcstr, pattern [, position [, occurrence [, match_option]]])

  REGEXP_REPLACE:搜索并且替換匹配的正則表達(dá)式

  (srcstr, pattern [, replacestr [, position [, occurrence [, match_option]]]])? 其中各參數(shù)的含義為:

  Sql代碼

  srcstr:? 被查找的字符數(shù)據(jù)。

  pattern: 正則表達(dá)式。

  occurrence:??? 出現(xiàn)的次數(shù)。默認(rèn)為1。

  position:????? 開(kāi)始位置

  return_option: 默認(rèn)值為0,返回該模式的起始位置;值為1則返回符合匹配條件的下一個(gè)字符的起始位置。

#p#副標(biāo)題#e#

  replacestr:??? 用來(lái)替換匹配模式的字符串。

  match_option:? 匹配方式選項(xiàng)。缺省為c。

  c:case sensitive

  I:case insensitive

  n:(.)匹配任何字符(包括newline)

  m:字符串存在換行的時(shí)候被作為多行處理

  下面通過(guò)一些具體的例子來(lái)說(shuō)明如何使用這四個(gè)函數(shù)。首先創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)表,

  Sql代碼

  SQL> create table person (

  2? first_name varchar(20),

  3? last_name varchar(20),

  4? email varchar(100),

  5? zip varchar(6));

  Table created.

  SQL> insert into person values ('Steven', 'Chen', '[email protected]', '123456');

  1 row created.

  SQL> insert into person values ('James', 'Li', '[email protected]' || chr(10) || '[email protected]', '1b3d5f');

  1 row created.

  SQL> commit;

  Commit complete.

  SQL> select * from person;

  FIRST_NAME LAST_NAME? EMAIL??? ZIP

  ---------- ---------- -------------------- ------

  Steven???? Chen [email protected]? 123456

  James????? Li?? [email protected]????? 1b3d5f

  [email protected]

  1。REGEXP_LIKE

  Sql代碼

  SQL> select zip as invalid_zip from person where regexp_like(zip, '[^[:digit:]]');

  INVALID_ZIP

  --------------------

  1b3d5f

  SQL> select first_name from person where regexp_like(first_name, '^S.*n$');

  FIRST_NAME

  ----------

  Steven

  SQL> select first_name from person where regexp_like(first_name, '^s.*n$');

  no rows selected

  SQL> select first_name from person where regexp_like(first_name, '^s.*n$', 'c');

  no rows selected

  SQL> select first_name from person where regexp_like(first_name, '^s.*n$', 'i');

  FIRST_NAME

  ----------

  Steven

  SQL> select email from person where regexp_like(email, '^james.*com$');

  no rows selected

  SQL> select email from person where regexp_like(email, '^james.*com$', 'n');

  EMAIL

  --------------------

  [email protected]

  [email protected]

  SQL> select email from person where regexp_like(email, '^li.*com$');

  no rows selected

  SQL> select email from person where regexp_like(email, '^li.*com$', 'm');

  EMAIL

  --------------------

  [email protected]

  [email protected]

  2。REGEXP_INSTR

  Sql代碼

  查找zip中第一個(gè)非數(shù)字字符的位置

  SQL> select regexp_instr(zip, '[^[:digit:]]') as position from person;

  POSITION

  ----------

  0

  2

#p#副標(biāo)題#e#

  從第三個(gè)字符開(kāi)始,查找zip中第二個(gè)非數(shù)字字符的位置

  SQL> select regexp_instr(zip, '[^[:digit:]]', 3, 2) as position from person;

  POSITION

  ----------

  0

  6

  從第三個(gè)字符開(kāi)始,查找zip中第二個(gè)非數(shù)字字符的下一個(gè)字符位置

  SQL> select regexp_instr(zip, '[^[:digit:]]', 3, 2, 1) as position from person;

  POSITION

  ----------

  0

  7

  3。REGEXP_SUBSTR

  Sql代碼

  SQL> select regexp_substr(zip, '[^[:digit:]]') as zip from person;

  ZIP

  ------------------

  b

  SQL> select regexp_substr(zip, '[^[:digit:]]', 3, 2) as zip from person;

  ZIP

  ------------

  f

  4。REGEXP_REPLACE

  Sql代碼

  把zip中所有非數(shù)字字符替換為0

  SQL> update person set zip=regexp_replace(zip, '[^[:digit:]]', '0')

  2? where regexp_like(zip, '[^[:digit:]]');

  1 row updated.

  SQL> select zip from person;

  ZIP

  ------

  123456

  103050

  后向引用(backreference):

  后向引用是 一個(gè)很有用的特性。它能夠把子表達(dá)式的匹配部分保存在臨時(shí)緩沖區(qū)中,供以后重用 。緩沖區(qū)從左至右進(jìn)行編號(hào),并利用 \digit 符號(hào)進(jìn)行訪問(wèn)。子表達(dá)式用一組圓括號(hào)來(lái)顯示。利用后向引用可以

關(guān)鍵詞標(biāo)簽:Oracle

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 誤刪Oracle數(shù)據(jù)庫(kù)實(shí)例的控制文件 為UNIX服務(wù)器設(shè)置Oracle全文檢索 為UNIX服務(wù)器設(shè)置Oracle全文檢索

相關(guān)下載

    人氣排行 oracle中使用SQL語(yǔ)句修改字段類型-oracle修改SQL語(yǔ)句案例 Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句 ORACLE和SQL語(yǔ)法區(qū)別歸納(1) oracle grant 授權(quán)語(yǔ)句 ORACLE修改IP地址后如何能夠使用 如何加速Oracle大批量數(shù)據(jù)處理 Oracle刪除表的幾種方法