oracle正則的使用

1、建表

create table person (first_name varchar2(20),last_name varchar2(20),email varchar2(40),zip varchar2(20));
insert into PERSON (first_name, last_name, email, zip)
values ('Steven', 'Chen', 'steven@hp.com', '123456');
insert into PERSON (first_name, last_name, email, zip)
values ('James', 'Li', 'jamesli@sum.com' || chr(10) || 'lijames@oracle.com', '1b3d5f');
insert into PERSON (first_name, last_name, email, zip)
values ('Tina', 'Zhang', 'chillaxzx@163.com', '2456hd');
insert into PERSON (first_name, last_name, email, zip)
values ('Tom', 'Feng', 'Tomfeng@126.com', 'a654e5');
insert into PERSON (first_name, last_name, email, zip)
values ('Jonson', 'zhao', 'Jonson@google.com', 'edjksk');
insert into PERSON (first_name, last_name, email, zip)
values ('Vines', 'Wu', 'Vines@162.com', '2djks4');
commit;
select * from person;

2、通配符

  1. ^ 行首,如果^在[]里面,表示非的意思,匹配字符串的開頭位置,如果A是字符串的第一個字符,^A;非A開頭的字符 ^[^A]
  2. $ 行尾,匹配字符串的末尾位置 如果B是字符串的最后一個字符,B$
  3. . 點匹配除null以外的任意單個字符
  4. * 匹配前面的字符0次或多次 ,ba*rk可以匹配 brk、bark、baark等等
  5. ? 匹配前面的字符0次或1次 , ba?rk可以匹配 bark、brk,但是不能匹配baark。
  6. + 匹配前面的字符1次或多次 ,ba+rk可以匹配 bark、baark等等,但是不能匹配brk,也就是說,最少有以一次。
  7. {m} 匹配前面的字符恰好是m次, 其中n是整數 。hob{2}it可以匹配hobbit
  8. {m,} 匹配前面的字符至少是m次 。hob{2,}it可以匹配hobbit、hobbbit等等
  9. {m,n} 匹配前面的字符至少是m次,最多是n次 。hob{2,3}it可以匹配hobbit或者hobbbit
  10. x|y 匹配“或” x|y可以匹配x或者y
  11. (pattern) 括號中pattern是一個子正則表達式,匹配指定pattern模式的一個子表達式。 如:aaa(x|y)可以匹配aaax或者aaay。
  12. [abc] 可以匹配abc中的任何單個字符, hello[abc]可以匹配helloa,hellob,helloc
  13. [a-z] 可以匹配指定范圍內的任何單個字符 。hell[a-z]可以匹配hello或者hellz
  14. [: :] 指定一個字符類,可以匹配該類中的任何字符

[[:alphanum:]] 可以匹配字符0-9、A-Z、a-z 任意數字和字母類似于[0-9a-zA-Z]
[[:alpha:]] 可以匹配字符A-Z、a-z 任意字母,類似于 [a-zA-Z]
[[:blank:]] 可以匹配空格或tab鍵
[[:digit:]] 可以匹配數字0-9 任意數字,類似于 [0-9]
[[:graph:]] 可以匹配非空字符
[[:lower:]] 可以匹配小寫字母a-z
[[:print:]] 所有的可打印字符 與[[:graph:]]類似,不同之處在于[:print:]包括空格字符
[[:punct:]] 可以匹配標點符號.,""等等
[[:space:]] 可以匹配所有的空字符(不會打印出來)
[[:upper:]] 可以匹配大寫字母A-Z
[[:xdigit:]] 可以匹配十六進制數字0-9、A-F、a-f

3、正則函數

匹配參數

  • c 大小寫敏感
  • i 大小寫不敏感
  • n 允許可以匹配任意字符的操作符
  • m 多行模式,允許將原字符串作為多個字符串對待
  • x 拓展模式,忽略正則表達式中的空白字符

(1)regexp_like 模糊匹配

regexp_like(,匹配模式[,匹配參數])
--查詢emp表中不是S開頭或不是J開頭的員工信息
select *
from emp
--where regexp_like(ename,'^[^SJ]');
where not regexp_like(ename,'^[SJ]');--查詢名字不以S或K結尾的員工信息(在中括號中表示取反有not in 的意思,不等于中括號里所有的)
select *
from emp
--where regexp_like(ename,'[^SK]$');
where not regexp_like(ename,'[SK]$');

(2)regexp_replace 用戶替換字符串中某個值

regexp_replace(str1,匹配模式[,str3[,1[,2[,匹配參數]]]]) 
--匹配參數建立數一數二都有的情況下才能寫
replace(str1,str2[,str3])  把str1中的str2整體替換成str3
str1:原字符串
str3:替換成的字符    不寫表示替換為空
數1:從數1位開始(不寫默認為1)2:第數2次符合匹配模式的字符串,不寫默認全替換(注:這里如果不寫那也不能寫匹配參數,不然系統會認為匹配參數就是他的數2)   
連起來是:把str1中從第數1位開始,第數2次符合匹配模式的字符串替換成str3select 'helloworld', regexp_replace('helloworld','l','*') a,regexp_replace('helloworld','l') b,regexp_replace('helloworld','ll','*') c,regexp_replace('helloworld','l','*',1,2) d,--從第一位找第二次l出現的位置regexp_replace('helloworld','l','*',4) e
from dual;--把zip列所有的數字替換成*
select zip,regexp_replace(zip,'[0-9]','*')
from person;
--把zip列第一個數字替換成?
select zip,regexp_replace(zip,'[0-9]','?',1,1)
from person;
--查詢zip列所有的字母部分  (常考)
select zip,regexp_replace(zip,'[^a-zA-Z]')       
from person;
--查詢zip列所有的數字部分  (常考)
select zip,regexp_replace(zip,'[^0-9]')
from person;

(3)replace_instr 使用正則表達式返回搜索模式的起點和終點(整數)

3.regexp_instr(str,匹配模式[,1[,2[,3[,匹配參數]]]]) 查找字符串位置  --返回數值
從第數1位開始找 找第數2次匹配的位置instr(str1,str2[,1[,2]])從數1開始,在str1查找str2字符第數2出現的位置
數1 --開始找的位置2 --匹配第幾次出現3 --非0返回‘匹配的字符串’的最后一位位置的下一個位置,找不到返回012不寫默認是13不寫默認從前往后找
數3不寫默認返回字符串中的第一個字符位置,
數3為非0返回字符串最末尾字符的后一位,找不到返回0--查找zip列第一個非數字的字符的位置
select  zip,regexp_instr(zip,'[^0-9]') a,regexp_instr(zip,'[^0-9]',2,1,0) b,regexp_instr(zip,'[^0-9]',2,1,4) c,--第二位找第一次出現的后一位regexp_instr(zip,'[^0-9]',1,1) d,regexp_instr(zip,'[^0-9]',5,1) e,regexp_instr(zip,'[^0-9]',5,1,7) f  
from person;--查找zip列第二次出現"字母和數字的組合"的位置(匹配字符串的第一個字符的位置)
select zip,regexp_instr(zip,'[a-zA-Z][0-9]',1,2)
from person;--查找email列'@'第一次出現的位置, '.' 第一次出現的位置, 標點符號第一次出現的位置
select email,regexp_instr(email,'@'),regexp_instr(email,'\.',1,1,0),regexp_instr(email,'[:.:]',1,1,0),regexp_instr(email,'[[:punct:]]')
from person;

(4)replace_substr 使用正則表達式返回指定返回串的起點和終點

regexp_substr(str,匹配模式[,1[,2[,匹配參數]]]) 截取字符串substr(str,1[,2]) 從str中的第數1為截取數2位長度的字符    數1 從第幾位開始找 
數2 第幾次匹配
從數1位開始找 截取第數2次匹配的字符串
數12不寫默認是1--截取zip列第一個"數字+字母"的組合
select zip,regexp_substr(zip,'[0-9][a-z]',1,1,'i') a,regexp_substr(zip,'[0-9][a-zA-Z]')
from  person; --截取zip列第一個連續的字母串
select  zip,  regexp_substr(zip,'[a-zA-Z][a-zA-Z]+',1,1),regexp_substr(zip,'[a-zA-Z]{2,}',1,1),regexp_substr(zip,'[a-z]{2,}',1,1,'i')
from  person;
--截取'i love http://www.52oracle.com'第一次出現o開頭e結尾中間任意四個字符的字符串
select 'i love http://www.52oracle.com',regexp_substr('i love http://www.52oracle.com','o....e')
from dual;

(5)replace_count 統計符合條件的字符出現的次數

regexp_count(source_char, pattern , position , match_param)
source:需要用來進行分析的字符串
pattern:字符(可以是正常字母數字等 a,1 等,也可以是正則表達式 /d /w  [a-z]等),整個函數的作用就是返回pattern在source中出現的次數值。
position:從字符串的那個位置開始分析,可以省略,默認值是1
match_param:匹配參數
匹配參數
‘i’ 用于不區分大小寫的匹配
‘c’ 用于區分大小寫的匹配
‘n’ 允許句點(.)作為通配符去匹配換行符。如果省略該參數,則句點將不匹配換行符
‘m’ 將源串視為多行。即Oracle 將^和$分別看作源串中任意位置任何行的開始和結束,而不是僅僅看作整個源串的開始或			  結束。如果省略該參數,則Oracle將源串看作一行。
‘x’ 忽略空格字符。默認情況下,空格字符與自身相匹配。select regexp_count('hello-world','o') from dual

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

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

相關文章

ASP+ACCESS基于B2C電子商務網站設計

摘 要 運用ASP技術結合了Access數據庫原理,基于B/S模式我們開發了一個網上購物系統。在我們的系統中,顧客可以很方便的注冊成為會員,對商品進行瀏覽檢索,查看商品的詳細資料,然后根據各人的喜好購買心儀的商品。系統…

CCF20220901——如此編碼

CCF20220901——如此編碼 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,m,cnt1,a[1000],c[1000]{1};cin>>n>>m;for(int i1;i<n;i){cin>>a[i];cnt*a[i];c[i]cnt;}int b[1000]{0};for(int i1;i<n;i)b[i](…

JPHS-JMIR Public Health and Surveillance

文章目錄 一、期刊簡介二、征稿信息三、期刊表現四、投稿須知五、投稿咨詢 一、期刊簡介 JMIR Public Health and Surveillance是一本多學科期刊&#xff0c;專注于公共衛生創新與技術的交叉領域&#xff0c;包括公共衛生信息學、監測&#xff08;監測系統和快速報告&#xff…

CCF20220601——歸一化處理

CCF20220601——歸一化處理 代碼如下&#xff1a; #include<bits/stdc.h> using namespace std; int main() {int n,a[1000],sum0;scanf("%d",&n);for(int i1;i<n;i){scanf("%d",&a[i]);suma[i];}double aver1.0,b0.0,d1.0;aversum/(n*1…

Java基礎(三)- 多線程、網絡通信、單元測試、反射、注解、動態代理

多線程基礎 線程&#xff1a;一個程序內部的一條執行流程&#xff0c;只有一條執行流程就是單線程 java.lang.Thread代表線程 主線程退出&#xff0c;子線程存在&#xff0c;進程不會退出 可以使用jconsole查看 創建線程 有多個方法可以創建線程 繼承Thread類 優點&#x…

【學習】實驗室服務器常用的Linux指令。

1. 下載GitHub代碼。 使用代碼&#xff1a; git clone https://github.com/Turoad/CLRNet.git2. 壓縮 / 解壓。 打包壓縮 是日常工作中備份文件的一種方式 在不同操作系統中&#xff0c;常用的打包壓縮方式是不同的選項 含義 Windows 常用 rarMac 常用 zipLinux 常用 tar.gz…

學碩都考11408的211院校!河北工業大學計算機考研考情分析!

河北工業大學&#xff08;Hebei University of Technology&#xff09;&#xff0c;簡稱河北工大&#xff0c;坐落于天津市&#xff0c;由河北省人民政府、天津市人民政府與中華人民共和國教育部共建&#xff0c; 隸屬于河北省&#xff0c;是國家“雙一流”建設高校、國家“211…

自動化測試在軟件開發生命周期中如何提高代碼質量?

自動化測試是一種在軟件開發生命周期中使用軟件工具來執行測試的方法&#xff0c;它可以大大提高代碼質量&#xff0c;減少開發過程中的錯誤和缺陷。本文將從零開始&#xff0c;詳細且規范地介紹如何使用自動化測試來提高代碼質量。 第一步&#xff1a;明確測試目標 在開始自…

webgl入門-繪制三角形

繪制三角形 前言 三角形是一個最簡單、最穩定的面&#xff0c;webgl 中的三維模型都是由三角面組成的。咱們這一篇就說一下三角形的繪制方法。 課堂目標 理解多點繪圖原理。可以繪制三角形&#xff0c;并將其組合成多邊形。 知識點 緩沖區對象點、線、面圖形 第一章 web…

Python高克勒-曼寧-斯特里克勒公式計算一維流量

&#x1f4dc;曼寧公式-用例 &#x1f4dc;Python流體數據統計模型和淺水滲流平流模型模擬 | &#x1f4dc;Python蒸發散物理問題(微積分-線性代數-拉普拉斯和傅立葉變換) ??Python計算一維流量 高克勒-曼寧-斯特里克勒公式公式基于一維&#xff08;橫截面平均&#xff09…

iPhone實況照片從Windows資源管理器復制的JPG+MOV無法正常還原到iPhone

背景&#xff1a; 之前使用的iPhone 15 Pro&#xff0c;使用的Windows資源管理器當中復制導出的實況照片&#xff0c;復制出來的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手機就賣掉了。現在使用的iPhone 14 Pro Max&#xff0c;想要導回之前備份的實況照片。嘗試使用愛思助手…

Java18新特性

Java 18引入了若干新特性&#xff0c;以增強語言的功能性和性能。具體如下&#xff1a; 服務提供者接口&#xff08;Service Provider Interfaces, SPI&#xff09;&#xff1a;允許開發者為Java模塊系統定義服務加載機制&#xff0c;從而能夠更靈活地發現和加載服務實現。簡單…

supOS NEO科技普惠!永久免費!億元補貼

數字化轉型正在全球蓬勃發展&#xff0c;工業操作系統進入大規模推廣期&#xff01; 如果您正在被預算不足、技術團隊不強、數字化投入產出比等問題困擾&#xff0c;supOS NEO是您最好的選擇。 “讓supOS走進萬千工廠、千行百業&#xff01;讓全世界每個工廠都能用得上supOS&am…

MM模塊學習三 (創建采購申請)

采購信息記錄比較特殊既是主數據又是貨源 注&#xff1a;發票校驗是指把供應商提供的發票做到系統里面產生一張應付憑證。 1.決定采購需求 采購需求可以手工創建&#xff08;ME51N&#xff09;&#xff0c;也可以自動產生&#xff08;比如&#xff1a;MRP&#xff0c;以及比如…

Java——內部類

1.什么是內部類 在一個類的里面再定義一個類&#xff0c;新定義的這個類就是內部類 舉例&#xff1a;在Outer類的里面定義一個Inter類 class Outer{class Inter{} } 在這里Outer叫外部類&#xff0c;Inter叫內部類 內部類的應用場景 定義一個汽車類&#xff1a; 屬性&#xf…

CTFshow之文件上傳web入門151關-161關解密。包教包會!!!!

這段時間一直在搞文件上傳相關的知識&#xff0c;正好把ctf的題目做做寫寫給自字做個總結&#xff01; 不過有一個確定就是所有的測試全部是黑盒測試&#xff0c;無法從代碼層面和大家解釋&#xff0c;我找個時間把upload-labs靶場做一做給大家講講白盒的代碼審計 一、實驗準…

2024-5-23 石群電路-14

2024-5-23&#xff0c;星期四&#xff0c;22:20&#xff0c;天氣&#xff1a;晴&#xff0c;心情&#xff1a;晴。今天沒有什么重要的事情發生&#xff0c;心情一如既往的平靜&#xff0c;距離返校假期還有兩天~~~。 今天觀看了石群老師電路基礎課程的第23/24個視頻&#xff0…

Flutter 中的 AnimatedThere 小部件:全面指南

Flutter 中的 AnimatedThere 小部件&#xff1a;全面指南 在Flutter中&#xff0c;動畫是增強用戶體驗的強大工具。雖然Flutter沒有一個名為AnimatedThere的官方小部件&#xff0c;但我們可以根據常見的動畫模式來構建一個類似的自定義動畫效果。本文將指導您如何使用Flutter的…

Python 安裝 ONNX Runtime (ORT)

1. Python 安裝 ONNX Runtime 安裝cpu版的 onnx runtime&#xff1a; pip install onnxruntime 安裝gpu版的 onnx runtime&#xff08;cuda 11.x&#xff09;&#xff1a;(默認安裝適用于cuda 11.8 的onnx runtime) pip install onnxruntime-gpu 安裝gpu版的 onnx runtime…

真實案例分享,終端pc直接telnet不到出口路由器。

1、背景信息 我終端pc的網卡地址獲取的網關是在核心交換機上&#xff0c;在核心交換機上telnet出口路由器可以實現。 所有終端網段都不能telnet出口路由器&#xff0c;客戶希望能用最小的影響方式進行解決。 2、現有配置信息 終端的無線和有線分別在兩個網段中&#xff0c;…