Oracle數據庫數據編程SQL<5 正則表達式函數*****>

Oracle 提供了一組強大的正則表達式函數,用于在 SQL 和 PL/SQL 中進行復雜的模式匹配和文本處理。這些函數基于 POSIX 標準正則表達式,功能強大且靈活。

目錄

一、Oracle 正則表達式函數概覽

二、函數詳解及示例

1. REGEXP_LIKE

2. REGEXP_INSTR

3. REGEXP_SUBSTR

4. REGEXP_REPLACE

5. REGEXP_COUNT

三、正則表達式模式元素

四、高級正則表達式技巧

1. 后向引用

2. 非貪婪匹配

3. 零寬斷言

五、性能考慮

六、綜合應用示例 

1. 數據驗證

2. 數據清洗

3. 復雜文本分析

七、各Oracle版本的正則表達式支持


一、Oracle 正則表達式函數概覽

Oracle 主要提供以下正則表達式函數:

  1. REGEXP_LIKE:檢查字符串是否匹配正則表達式模式
  2. REGEXP_INSTR:返回匹配子串的位置
  3. REGEXP_SUBSTR:提取匹配的子串
  4. REGEXP_REPLACE:替換匹配的子串
  5. REGEXP_COUNT (11g+):計算匹配出現的次數

二、函數詳解及示例

1. REGEXP_LIKE

【功能:】檢查字符串是否匹配指定的正則表達式模式,返回滿足條件的字段【語法:】
REGEXP_LIKE(source_string, pattern [, match_parameter])
regexp_like(列名,匹配模式,匹配行為)
由正則表達式構成匹配模式,長度在512個字節內【參數:】
source_string:要搜索的字符串
pattern:正則表達式模式
match_parameter:可選,修改匹配行為,可包含以下字符:'i':不區分大小寫'c':區分大小寫'n':允許點號(.)匹配換行符'm':多行模式【示例:】
-- 檢查字符串是否包含數字
SELECT * FROM employees 
WHERE REGEXP_LIKE(job_id, '[0-9]');-- 不區分大小寫匹配
SELECT * FROM customers 
WHERE REGEXP_LIKE(name, '^john', 'i');

2. REGEXP_INSTR

【功能:】返回匹配子字符串的起始或結束位置;返回滿足條件的字符或字符串的位置【語法:】
REGEXP_INSTR(source_string, pattern [, start_position [, occurrence [, return_option [, match_parameter [, subexpression]]]])
regexp_instr(列名,匹配模式,數1,數2,匹配行為)--從數1位開始查,查第數2次匹配的位置【參數:】
start_position:開始搜索的位置,默認為1
occurrence:    要查找的第幾個匹配項,默認為1
return_option:0:返回匹配的第一個字符位置(默認)1:返回匹配后的下一個字符位置
subexpression: 對于有子表達式的模式,指定哪個子表達式【示例:】
-- 查找第一個數字出現的位置
SELECT REGEXP_INSTR('Order 12345', '[0-9]') FROM dual;
-- 結果:7-- 查找第二個數字出現的位置
SELECT REGEXP_INSTR('Order 12345', '[0-9]', 1, 2) FROM dual;
-- 結果:8-- 查找電子郵件中的域名位置
SELECT REGEXP_INSTR('user@example.com', '@[^.]+\\.') FROM dual;

3. REGEXP_SUBSTR

【功能:】提取匹配正則表達式的子字符串【語法:】
REGEXP_SUBSTR(source_string, pattern [, start_position [, occurrence [, match_parameter [, subexpression]]]])
regexp_substr(列名,匹配模式,數1,數2,匹配行為)【示例:】
-- 提取字符串中的第一個數字序列
SELECT REGEXP_SUBSTR('Order 12345 for 678 items', '[0-9]+') FROM dual;
-- 結果:12345-- 提取電子郵件中的用戶名
SELECT REGEXP_SUBSTR('user@example.com', '^[^@]+') FROM dual;
-- 結果:user-- 提取第三個由空格分隔的單詞
SELECT REGEXP_SUBSTR('Oracle Database 12c', '[^ ]+', 1, 3) FROM dual;
-- 結果:12c

4. REGEXP_REPLACE

【功能:】替換匹配正則表達式的子字符串【語法:】
REGEXP_REPLACE(source_string, pattern [, replace_string [, start_position [, occurrence [, match_parameter]]])
regexp_replace(列名,匹配模式,字符,數1,數2,匹配行為)【示例:】
-- 隱藏信用卡號中間數字
SELECT REGEXP_REPLACE('Card: 1234-5678-9012-3456', '([0-9]{4})-([0-9]{2})[0-9]{2}-([0-9]{4})', '\1-XX-XX-\3') FROM dual;
-- 結果:Card: 1234-XX-XX-3456-- 標準化日期格式
SELECT REGEXP_REPLACE('31/12/2023', '([0-9]{2})/([0-9]{2})/([0-9]{4})', '\3-\2-\1') FROM dual;
-- 結果:2023-12-31-- 移除所有非字母字符
SELECT REGEXP_REPLACE('A1B2C3', '[^A-Za-z]', '') FROM dual;
-- 結果:ABC

5. REGEXP_COUNT

【功能:】計算正則表達式模式出現的次數(Oracle 11g+)【語法:】
REGEXP_COUNT(source_string, pattern [, start_position [, match_parameter]])
regexp_count(列名,匹配模式,數1,匹配行為)--從數1位開始查【示例:】
-- 計算字符串中數字出現的次數
SELECT REGEXP_COUNT('Order 12345 for 678 items', '[0-9]') FROM dual;
-- 結果:8-- 計算單詞"the"出現的次數(不區分大小寫)
SELECT REGEXP_COUNT('The quick brown fox jumps over the lazy dog', '\bthe\b', 1, 'i') FROM dual;
-- 結果:2

三、正則表達式模式元素

Oracle 支持的標準正則表達式元字符:

元字符描述示例
^

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75856.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75856.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75856.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

el-tabs添加按鈕增加點擊禁止樣式

前置文章 一、vue使用element-ui自定義樣式思路分享【實操】 二、vue3&ts&el-tabs多個tab表單校驗 現狀確認 點擊添加按鈕,沒有點擊樣式,用戶感知不明顯沒有限制最大的tab添加數量,可以無限添加 調整目標&代碼編寫 調整目標…

DB-Mysql中TIMESTAMP與DATETIME的區別

文章目錄 ?存儲范圍??時區處理?存儲空間?默認值和自動更新??零值處理?適用場景?總結 在MySQL中,TIMESTAMP和DATETIME是兩種常用的日期時間數據類型,它們雖然都用于存儲日期和時間,但在多個方面存在顯著差異。以下是它們的主要區別&a…

Spring 中有哪些設計模式?

🧠 一、Spring 中常見的設計模式 設計模式類型Spring 中的應用場景單例模式創建型默認 Bean 是單例的工廠模式創建型BeanFactory、FactoryBean抽象工廠模式創建型ApplicationContext 提供多個工廠接口代理模式結構型AOP 動態代理(JDK/CGLIB)…

C# Winform 入門(3)之尺寸同比例縮放

放大前 放大后 1.定義當前窗體的寬度和高度 private float x;//定義當前窗體的寬度private float y;//定義當前窗臺的高度 2.接收當前窗體的尺寸大小 x this.Width;//存儲原始寬度ythis.Height;//存儲原始高度setTag(this);//為控件設置 Tag 屬性 3.聲明方法,獲…

從零開始的編程-java篇1.6.3

前言: 通過實踐而發現真理,又通過實踐而證實真理和發展真理。從感性認識而能動地發展到理性認識,又從理性認識而能動地指導革命實踐,改造主觀世界和客觀世界。實踐、認識、再實踐、再認識,這種形式,循環往…

【Redis】數據的淘汰策略

目錄 淘汰策略方案(8種) LRU和LFU策略的區別 使用建議 手搓LRU算法 方式一 方式二 大家好,我是jstart千語。今天和大家回來聊一下redis,這次要講的是它的淘汰策略。為什么需要淘汰策略呢,就是當redis里面的內存占…

【前端】Node.js一本通

近兩天更新完畢,建議關注收藏點贊。 目錄 復習Node.js概述使用fs文件系統模塊path路徑模塊 http模塊 復習 為什么JS可以在瀏覽器中執行 原理:待執行的JS代碼->JS解析引擎 不同的瀏覽器使用不同的 JavaScript 解析引擎:其中,C…

【AI論文】JavisDiT: 具備層次化時空先驗同步機制的聯合音視頻擴散Transformer

摘要:本文介紹了一種新型的聯合音頻-視頻擴散變換器JavisDiT,該變換器專為同步音頻-視頻生成(JAVG)而設計。 基于強大的擴散變換器(DiT)架構,JavisDiT能夠根據開放式用戶提示同時生成高質量的音…

Java-實現公有字段自動注入(創建人、創建時間、修改人、修改時間)

文章目錄 Mybatis-plus實現自動注入定義 MetaObjectHandler配置 MyBatis-Plus 使用 MetaObjectHandler實體類字段注解使用服務類進行操作測試 Jpa啟用審計功能實現自動注入添加依賴啟動類啟用審計功能實現AuditorAware接口實體類中使用審計注解 總結 自動注入創建人、創建時間、…

金融機構開源軟件風險管理體系建設

開源軟件為金融行業帶來了創新活力的同時,也引入了一系列獨特的風險。金融機構需要構建系統化的風險管理體系,以識別和應對開源軟件在全生命周期中的各種風險點。下面我們將解析開源軟件在金融場景下的主要風險類別,并探討如何建立健全的風險…

圖形渲染中的定點數和浮點數

三種API的NDC區別 NDC全稱,Normalized Device Coordinates Metal、Vulkan、OpenGL的區別如下: featureOpenGL NDCMetal NDCVulkan NDC坐標系右手左手右手z值范圍[-1,1][0,1][0,1]xy視口范圍[-1,1][-1,1][-1,1] GPU渲染的定點數和浮點數 定點數類型&a…

同花順客戶端公司財報抓取分析

目標客戶端下載地址:https://ft.51ifind.com/index.php?c=index&a=download PC版本 主要難點在登陸,獲取token中的 jgbsessid (每次重新登錄這個字段都會立即失效,且有效期應該是15天的) 抓取jgbsessid 主要通過安裝mitmproxy 使用 mitmdump + 下邊的腳本實現監聽接口…

QT工程建立

打開軟件新建一個工程 選擇chose 工程命名,選擇保存路徑,可以自己選擇,但是不要有中文路徑 默認的直接下一步 任意選一個下一步 點擊完成 之后是這個界面,點擊右下角的綠色三角形編譯一下 實驗內容 添加類 第一個是建立cpp和.h文件…

【NLP 53、投機采樣加速推理】

目錄 一、投機采樣 二、投機采樣改進:美杜莎模型 流程 改進 三、Deepseek的投機采樣 流程 Ⅰ、輸入文本預處理 Ⅱ、引導模型預測 Ⅲ、候選集篩選(可選) Ⅳ、主模型驗證 Ⅴ、生成輸出與循環 騙你的,其實我在意透了 —— 25.4.4 一、…

ffmpeg時間基與時間戳

時間基、時間戳 時間基:表示時間單位的分數,用來定義視頻或音頻流中時間的精度。其形式是一個分數,分子通常為 1,而分母則表示每秒的單位數。 時間戳:代表在時間軸里占了多少個格子,是特定的時間點。 時間…

激光加工中平面傾斜度的矯正

在激光加工中,加工平面的傾斜度矯正至關重要,直接影響加工精度和材料處理效果。以下是系統的矯正方法和步驟: 5. 驗證與迭代 二次測量:加工后重新檢測平面度,確認殘余誤差。 反饋優化:根據誤差分布修正補償…

算法刷題記錄——LeetCode篇(2.2) [第111~120題](持續更新)

更新時間:2025-04-04 算法題解目錄匯總:算法刷題記錄——題解目錄匯總技術博客總目錄:計算機技術系列博客——目錄頁 優先整理熱門100及面試150,不定期持續更新,歡迎關注! 114. 二叉樹展開為鏈表 給你二…

C語言學習筆記-9

九、結構體 構造類型: 不是基本類型的數據結構也不是指針類型, 它是若干個相同或不同類型的數據構成的集合 結構體類型: 結構體是一種構造類型的數據結構,是一種或多種基本類型或構造類型的數據的集合。 1.結構體類型定義 定…

Test——BUG篇

目錄 一軟件測試的生命周期 二BUG 1概念 2描述Bug 3Bug級別 4Bug的生命周期 三與開發人員發生爭執怎么辦 ?編輯1先自省:是否Bug描述不清晰 2站在用戶角度考慮并拋出問題 3Bug定級有理有據 4不僅要提出問題,還要給出解決方案 5Bug評審 5.1…

【Block總結】HWAB,半小波注意力塊|即插即用

論文信息 標題: HALF WAVELET ATTENTION ON M-NET+ FOR LOW-LIGHT IMAGE ENHANCEMENT 地址: arXiv:2203.01296 日期: 2022年3月 創新點 改進的分層架構 M-Net+: 提出了一個專為低光圖像增強設計的改良分層模型 M-Net+。該架構旨在緩解采樣過程中的空間信息損失問題。通過采用…