oracle正則怎么用 oracle的正則表達(dá)式語法

oracle 如何使用正則表達(dá)式匹配出一級(jí)域名

匹配完整域名的正則表達(dá)式:

創(chuàng)新互聯(lián)建站專注于企業(yè)成都營銷網(wǎng)站建設(shè)、網(wǎng)站重做改版、詔安網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5開發(fā)、商城網(wǎng)站開發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站制作、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為詔安等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?

[a-zA-Z0-9][-a-zA-Z0-9]{0,62}表達(dá)的意思如下:

一個(gè)完整的域名,由根域名、頂級(jí)域名、二級(jí)域名、三級(jí)域名……構(gòu)成,每級(jí)域名之間用點(diǎn)分開,每級(jí)域名由字母、數(shù)字和減號(hào)構(gòu)成(第一個(gè)字母不能是減號(hào)),不區(qū)分大小寫,長度不超過63。

(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?表達(dá)的意思如下:

完整的域名至少包括兩個(gè)名字(比如google.com,由google和com構(gòu)成),最后可以有一個(gè)表示根域的點(diǎn)(在規(guī)范中,最后有一個(gè)點(diǎn)的才是完整域名,但一般認(rèn)為包括兩個(gè)以上名字的域名也是完整域名,哪怕后面沒有點(diǎn))。

如何在oracle中使用正則表達(dá)式

regexp_like 2。regexp_substr 3。regexp_instr 4。regexp_replace 看函數(shù)名稱大概就能猜到有什么用了。 regexp_like 只能用于條件表達(dá)式,和 like 類似,但是使用的正則表達(dá)式進(jìn)行匹配,語法很簡單: regexp_substr 函數(shù),和 substr 類似,用于拾取合符正則表達(dá)式描述的字符子串,語法如下: regexp_instr 函數(shù),和 instr 類似,用于標(biāo)定符合正則表達(dá)式的字符子串的開始位置,語法如下: regexp_replace 函數(shù),和 replace 類似,用于替換符合正則表達(dá)式的字符串,語法如下: 這里解析一下幾個(gè)參數(shù)的含義: 1。source_char,輸入的字符串,可以是列名或者字符串常量、變量。 2。pattern,正則表達(dá)式。 3。match_parameter,匹配選項(xiàng)。 取值范圍: i:大小寫不敏感; c:大小寫敏感;n:點(diǎn)號(hào) . 不匹配換行符號(hào);m:多行模式;x:擴(kuò)展模式,忽略正則表達(dá)式中的空白字符。 4。position,標(biāo)識(shí)從第幾個(gè)字符開始正則表達(dá)式匹配。 5。occurrence,標(biāo)識(shí)第幾個(gè)匹配組。 6。replace_string,替換的字符串。 說了一堆文縐縐的,現(xiàn)在開始實(shí)例演練了,在此之前先建好一個(gè)表。 01 create table tmp as 02 with data as ( 03 select 'like' as id ,'a9999' as str from dual union all 04 select 'like' ,'a9c' from dual union all 05 select 'like' ,'A7007' from dual union all 06 select 'like' ,'123a34cc' from dual union all

在oracle中如何使用正則函數(shù)表達(dá)式截取每一行中的每一個(gè)單元格中有多行數(shù)據(jù)的第一列?

函數(shù)格式如下:

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)

__srcstr :需要進(jìn)行正則處理的字符串

__pattern :進(jìn)行匹配的正則表達(dá)式

__position :起始位置,從第幾個(gè)字符開始正則表達(dá)式匹配(默認(rèn)為1)

__occurrence :標(biāo)識(shí)第幾個(gè)匹配組,默認(rèn)為1

__modifier :模式('i'不區(qū)分大小寫進(jìn)行檢索;'c'區(qū)分大小寫進(jìn)行檢索。默認(rèn)為'c'。)

Oracle正則表達(dá)式

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

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

元字符(Meta Character)

Sql代碼

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

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

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

???????????? 匹配 次或 次

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

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

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

{m n}?????? 至少匹配 m 次但不超過 n 次

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

[:lower:]??? 小寫字母字符

[:upper:]??? 大寫字母字符

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

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

[:space:]??? 空白字符(禁止打?。?如回車符 換行符 豎直制表符和換頁符[:punct:]??? 標(biāo)點(diǎn)字符

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

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

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

[char]?????? 字符列表

Oracle g提供了四個(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)為

position:????? 開始位置

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

replacestr:??? 用來替換匹配模式的字符串

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

c case sensitive

I case insensitive

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

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

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

Sql代碼

SQL create table person (

first_name varchar( )

last_name varchar( )

email varchar( )

zip varchar( ));

Table created

SQL insert into person values ( Steven Chen );

row created

SQL insert into person values ( James Li || chr( ) || b d f );

row created

SQL mit;

Commit plete

SQL select * from person;

FIRST_NAME LAST_NAME? EMAIL??????????????? ZIP

Steven???? Chen?????? ???????

James????? Li???????? ????? b d f

REGEXP_LIKE

Sql代碼

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

INVALID_ZIP

b d f

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 *$ );

no rows selected

SQL select email from person where regexp_like(email ^james *$ n );

EMAIL

SQL select email from person where regexp_like(email ^li *$ );

no rows selected

SQL select email from person where regexp_like(email ^li *$ m );

EMAIL

REGEXP_INSTR

Sql代碼

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

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

POSITION

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

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

POSITION

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

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

POSITION

REGEXP_SUBSTR

Sql代碼

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

ZIP

b

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

ZIP

f

REGEXP_REPLACE

Sql代碼

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

SQL update person set zip=regexp_replace(zip [^[:digit:]] )

where regexp_like(zip [^[:digit:]] );

row updated

SQL select zip from person;

ZIP

后向引用(backreference)

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

Sql代碼

SQL select regexp_replace( Steven Chen ( *) ( *) \ \ ) as reversed_name from dual;

REVERSED_NAME

Chen Steven

在DDL中也可以正則表達(dá)式 比如Constraint index view

Sql代碼

SQL alter table person add constraint constraint_zip check (regexp_like(zip ^[[:digit:]]+$ ));

lishixinzhi/Article/program/Oracle/201311/18745

網(wǎng)頁名稱:oracle正則怎么用 oracle的正則表達(dá)式語法
本文來源:http://muchs.cn/article8/hgejop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、定制開發(fā)、自適應(yīng)網(wǎng)站、網(wǎng)站策劃、品牌網(wǎng)站建設(shè)、電子商務(wù)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)