亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > Oracle > 正文

Oracle 正則表達式實例詳解

2024-08-29 13:59:56
字體:
來源:轉載
供稿:網友

Oracle 正則表達式實例詳解

FORM開發中的按行拆分需求:拆分后的行要有規律,并按前后層次排序

  需求分析如下:

     現有行: 2  ,      2.1  ,     2.2   ,   2.3           3
                     2.1.1,    2.1.2  ,    2.1.3 ,    2.2.1  , 2.1.1.1, 2.1.1.2,

對 2 進行拆分得到的 結果應該是 2.4 (2.4 是通過 查看歷史記錄中以2 開頭,有一位小數點,小數點后一位最大值,獲得該最大值+1 ,得到既是新行的后綴,保證拆分是按照前后順序遞增的)

對 2.1 進行拆分得到的應該是 :2.1.4 首先要保證 每次拆分得到的下一行都是多一位小數點 

對2.1 拆分 獲取最大后綴 比較對象 時候  應該匹配前綴是2.1的 且只有兩位小數點的   (排除前綴符合位數不符合的情況:2.1.1.1 ,2.1.1.2 )

對3 進行拆分 沒有歷史記錄是以 3開頭的情況 這時候 就要重新 開始拆分:得到的應該是 3.1

這里的關鍵就是匹配歷史記錄進行比較,決定拆分后的最后一位的最大值

  匹配的時候不能按照 數字的位數來判斷,因為數字有可能是兩位數,三位數,應該根據小數點來判斷

匹配要使用到 正則表達式:

與PHP、Python一樣Oracle 的正則表達式函數也是 主要由四個函數實現:相似匹配,定位查找,獲取匹配子字符串,替換匹配結果(最重要)

(1)相似匹配: regexp_like() 

regexp(source_str,pattern,match_parameter)

 第一個參數:原字符串,第二個參數匹配模式,第三個參數匹配選項

第三個參數 匹配選項在這幾個函數中都要相似作用(可選)

     常用: i:大小寫不敏感; c:大小寫敏感;          n:點號 . 不匹配換行符號;                   
                 m:多行模式;      x:擴展模式,忽略正則表達式中的空白字符。

匹配成功返回true 失敗返回 false

我的使用:

IF REGEXP_LIKE(DEL_LINE_NUMBER, '^/d*/./d*/./d*$') THEN          --匹配只有兩個小數點的數字,字符串

  模式中的符號說明:模式需要用一對雙引號括起來
                                            ^ 標明字符串的開頭,        $ 標明字符串的結尾 
                                            /d 匹配 一個0-9 的數字      * 號  匹配前面的字符0次或更多次
                                              /. 匹配一個點號,因為點號有其他含義,所以用/作為轉義

(2)定位查找字符位置:regexp_instr( )

regexp_instr(source_string ,pattern,position,occurrence ,return_option ,match_parameter )source_string:輸入的字符串pattern:正則表達式position:標識從第幾個字符開始正則表達式匹配。(默認為1)occurrence:標識第幾個匹配組。(默認為1)return_option:0——返回第一個字符出現的位置。1:pattern下一個字符起始位置。match_parameter:匹配模式

前面兩個字段必輸:

regexp_instr() select str, regexp_instr(str,'/.' ) ind , 默認從第一個字符開始查找,查找第一個.號,也可以匹配資格符合要求的字符串,寫對匹配格式即可,不一定是單個字符 regexp_instr(str,'/.',1,2) ind , 從第1個字符開始,查找第二個.號所在的位置 regexp_instr(str,'/.',5,2) ind 從第五個字符開始,查找第二個.號的位置,注意最終查找到的字符和字符串的位置是相對于查找字符串的起始位置fromtmp where id='instr';STR    IND IND IND--------------- ----- ----- -----192.168.0.1   4  8 10
  select regexp_instr('192.168.0.1','/.',1,level) ind , -- 點號. 所在的位置 regexp_instr('192.168.0.1','/d',1,level) ind -- 每個數字的位置fromdualconnectbylevel <= 9 連續匹配目標字符串出現的第一次出現的位置,第二次出現的位置,直到第九次出現的位置 IND IND----- ----- 4  1 8  2 10  3 0  5 0  6 0  7 0  9 0 11 -- 第八個數字所在位置為 11 這里不存在第九個數字,匹配不到,返回的地址為0  0  0 -- 沒有匹配到時返回為0 ,對應第一位是從1開始,而不是0 開始

我的案例:

 V_POSITION_BIT := REGEXP_INSTR(REC_DATA.DEL_LINE_NUMBER,'/.',1,2) -1; -- 第二個小數點的位數,減一

 substr(DEL_LINE_NUMBER,1,V_POSITION_BIT) -- 獲取字符串中第二個小數點之前的子串

(3) 獲取匹配子字符串:regexp_substr()

regexp_substr(source_string ,pattern,position,occurrence  ,match_parameter)

regexp_substr()在最初目的是根據字符串中某一個字符,分割字符串形成一個數組之類的

例如: 192.168.233.23   按點號"." 分組 最終結果有四個 :192     168     233     23  

注意的是 pattern書寫的格式不僅僅要用括號括起來,還要使用中括號括起來

我的案例:

REGEXP_SUBSTR(DEL_LINE_NUMBER,'[^.]+',1,1) -- 匹配前綴相同,第一個小數點前的字符select str, regexp_substr(str,'[^,]+')  str, regexp_substr(str,'[^,]+',1,1) str, 從第一位開始匹配,獲得用逗號分隔字符串之后,第一個‘分割后的子串' regexp_substr(str,'[^,]+',1,2) str, -- occurrence 第幾個匹配組 regexp_substr(str,'[^,]+',2,1) str -- position 從第幾個字符開始匹配fromtmpwhereid='substr';STR    STR    STR    STR    STR--------------- --------------- --------------- --------------- ---------------123,234,345  123    123    234    2312,34.56:78  12    12    34.56:78      2123456789  123456789  123456789  逗號分割后不存在第二個   23456789(從第二位之后開始分割,沒有就是取整體)

(4) 替換匹配結果:regexp_replace()

select str, regexp_replace(str,'020','GZ') str, regexp_replace(str,'(/d{3})(/d{3})','</2/1>') str -- 將第一、第二捕獲組交換位置,用尖括號標識出來fromtmpwhereid='replace'; STR    STR    STR--------------- --------------- ---------------(020)12345678 (GZ)12345678 (020)<456123>78001517729C28 001517729C28 <517001>729C28

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲va久久久噜噜噜| 日韩精品在线观看网站| 中文字幕日韩精品在线观看| 精品国产福利在线| 97av在线播放| 国产精品久久久久久久av电影| 久久777国产线看观看精品| 色中色综合影院手机版在线观看| 日韩在线观看网址| 亚洲另类激情图| 亚洲成人久久久久| 国产一区二区三区在线播放免费观看| 国产一区二区免费| 久久躁日日躁aaaaxxxx| 日韩欧美一区二区在线| 一区二区三区四区视频| www.亚洲一二| 欧美乱大交xxxxx另类电影| 久热精品视频在线| 91天堂在线观看| 欧美专区福利在线| 色一区av在线| 国产免费一区二区三区香蕉精| 国产精品igao视频| 亚洲日本成人女熟在线观看| yw.139尤物在线精品视频| 成人免费黄色网| 日本精品视频在线| 高潮白浆女日韩av免费看| 欧美日韩免费看| 久久中文字幕视频| 一本色道久久88综合日韩精品| 亚洲美女av在线播放| 欧美激情在线狂野欧美精品| 日本精品中文字幕| 欧美精品videossex88| 欧美一区二区三区……| 成人午夜在线影院| 色综合五月天导航| 亚洲影视九九影院在线观看| 亚洲精品久久7777777| 国产成人精品免高潮费视频| 欧美日韩精品中文字幕| 国产91av在线| 欧美天天综合色影久久精品| 91精品国产91| 日本一区二区三区在线播放| 91av在线影院| 日韩精品极品毛片系列视频| 97超碰国产精品女人人人爽| 久久久久久久久久婷婷| 国产日韩中文字幕| 欧美激情亚洲精品| 91在线免费网站| 国产一级揄自揄精品视频| 欧美色道久久88综合亚洲精品| 动漫精品一区二区| 国产精品成av人在线视午夜片| 精品无人国产偷自产在线| 日韩中文字幕在线视频播放| 国产欧美亚洲视频| 欧美成人在线免费视频| 国产999在线观看| 国产精品黄页免费高清在线观看| 国产一区二区激情| 中文字幕日本精品| 91在线高清视频| 久久亚洲春色中文字幕| 欧美一区二区三区……| 97视频在线观看视频免费视频| 欧美另类高清videos| 青青久久av北条麻妃黑人| 亚洲xxxxx电影| 国产精品久久久久久久av电影| 久久精品视频播放| 久久精品一区中文字幕| 久久中文字幕一区| 欧美在线亚洲一区| 久久久久久久久久久成人| 国产91精品久久久久久| 91精品国产91久久久久| 亚洲韩国日本中文字幕| 日韩免费在线观看视频| 国产精品 欧美在线| 精品久久久久久久久久久久久| 亚洲免费一在线| 久久久爽爽爽美女图片| 国产z一区二区三区| 亚洲欧美国产精品| 国产日韩精品在线观看| 欧美大片网站在线观看| 日韩精品高清视频| 日本一区二区三区四区视频| 97免费在线视频| 亚洲va国产va天堂va久久| 久久深夜福利免费观看| 国产精品久久久久久久久久久不卡| 午夜剧场成人观在线视频免费观看| 亚洲第一区中文字幕| 成人激情视频小说免费下载| 精品国产乱码久久久久久虫虫漫画| 亚洲成人久久网| 国内伊人久久久久久网站视频| 日韩电影中文字幕一区| 国产精品女人网站| 亚洲一品av免费观看| 欧美香蕉大胸在线视频观看| 亚洲网站在线观看| 亚洲一级免费视频| 精品一区二区三区四区| 91影视免费在线观看| 亚洲天堂影视av| 久久久精品国产一区二区| www日韩欧美| 亚洲人成五月天| 色综合伊人色综合网| 日韩美女福利视频| 青青草国产精品一区二区| 亚洲国产成人在线视频| 中文字幕日韩在线视频| 亚洲精品视频久久| 九九久久久久久久久激情| 亚洲天堂日韩电影| 欧美日韩国产色| 日韩高清av一区二区三区| 成人xvideos免费视频| 成人情趣片在线观看免费| 欧美网站在线观看| 欧美国产日韩精品| 亚洲欧美日韩一区在线| 国产精品久久久亚洲| 欧美做受高潮1| 日韩在线视频导航| 久久夜色精品国产亚洲aⅴ| www.亚洲人.com| 欧美高清视频在线观看| 热久久美女精品天天吊色| 久久久伊人欧美| 国产精品999| 国产精品久久77777| 91精品综合视频| 国产一区二区三区高清在线观看| 欧美理论片在线观看| 日韩中文字幕精品| 日韩欧美在线一区| 亚洲国产成人爱av在线播放| 亚洲欧美日韩国产中文| www.久久久久久.com| 久久久国产在线视频| 北条麻妃99精品青青久久| 欧美怡红院视频一区二区三区| 国产丝袜一区视频在线观看| 日韩中文字幕在线免费观看| 中文字幕精品在线| 久久久精品国产| 欧美一级高清免费| 亚洲小视频在线| 国产一区二区三区免费视频| 亚洲综合精品一区二区| 一区二区三区回区在观看免费视频| 91久久精品美女| 国产午夜精品全部视频在线播放| 亚洲精品视频在线播放| 久久中文字幕一区|