oracle中的支援正規表示式的函式主要有下面四個:
1,regexp_like :與like的功能相似
2,regexp_instr :與instr的功能相似
3,regexp_substr :與substr的功能相似
4,regexp_replace :與replace的功能相似
正規表示式中常用到的元資料(metacharacter)如下:^ 匹配字串的開頭位置。
$ 匹配支付傳的結尾位置。
*匹配該字元前面的乙個字元0次,1次或者多次出現。例如52*oracle 可以匹配 5oracle,52oracle,522oracle,5222oracle等等。
+ 匹配該字元前面的乙個字元1次或者多次出現。例如52+oracle 可以匹配 52oracle,522oracle,5222oracle等等
? 匹配該字元前面的乙個字元0次或1次或者多次出現。例如52?oracle 只能匹配5oracle,52oracle等等
匹配乙個字串n次,n為正整數。例如:helo 所匹配的是hello
匹配乙個字串至少n次,至多m次。其中n和m都是整數。
. 匹配除了null之外的任何單個字串
(pattern) 這個是用來匹配指定模式的乙個子表示式
x|y 匹配x或者y,其中x和y是乙個或者多個字元
[abc] 匹配括號中的任意乙個字元。例如:[ab]bc可以匹配abc和bbc
[a-z] 匹配指定範圍內的任意字串。例如[a-g]hi可以匹配ahi至ghi
[::]指定乙個字元類,可以匹配該類中的任意字元 這裡的字元類包括:
[:alphanum:] 可以匹配字元0-9、a-z、a-z
[:alpha:]可以匹配字元a-z、a-z
[:blank:]可以匹配空格或者tab鍵
[:digit:]可以匹配數字 0-9
[:gragh:]可以匹配非空字元
[:punct:]可以匹配. , 」 『等標點符號。
[:upper:]可以匹配字元a-z
[:lower:]可以匹配字元a-z
各種操作符的運算優先順序
\轉義符
(), (?:), (?=), 圓括號和方括號
*, +, ?, , , 限定符
^, $, anymetacharacter 位置和順序
| */
字串』^198[0-9]$』可以匹配『1980-1989』,如果希望統計出公司那些員工是80年~89年入職的,就可以使用如下的sql語句:
select * from
empe where
regexp_like
(to_char
( e.
hiredate
,'yyyy
'),'^198[0-9]$');
substr和instr套嵌使用就可以實現indexof類似功能
--查詢@tv 後面是否全部都是數字
select t.acc_nbr,t.main_acc_nbr from user t
where regexp_like(substr(t.main_acc_nbr,instr(upper(t.main_acc_nbr),'@tv')+3,20),'^[0-9]+[0-9]*$')
and t.acc_nbr='pay001';
--查詢@tv 後面是否全部都是數字
select t.acc_nbr,t.main_acc_nbr from user t
where regexp_like(substr(t.main_acc_nbr,instr(upper(t.main_acc_nbr),'@tv')+3,20),'^[[:digit:]]+$')
and t.acc_nbr='pay001';
--查詢@tv 後面是否全部都是數字
select t.main_acc_nbr from user t
--排除沒有@tv的賬號
where to_number(instr(t.main_acc_nbr,'@tv')) != 0
--排除賬號@tv 後面是否全部都是數字
and regexp_like(substr(t.main_acc_nbr,instr(upper(t.main_acc_nbr),'@tv')+3,20),'^[0-9]+[0-9]*$') ;
參考:oracle 字元函式相關
正規表示式用於字串處理、表單驗證等場合,實用高效。現將一些常用的表示式收集於此,以備不時之需。
使用者名稱:/^[a-z0-9_-]$/
密碼:/^[a-z0-9_-]$/
十六進製制值:/^#?([a-f0-9]|[a-f0-9])$/
html 標籤:/^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$/
unicode編碼中的漢字範圍:/^[u4e00-u9fa5],$/
匹配中文字元的正規表示式: [\u4e00-\u9fa5]
評注:匹配中文還真是個頭疼的事,有了這個表示式就好辦了
匹配雙位元組字元(包括漢字在內):[^\x00-\xff]
評注:可以用來計算字串的長度(乙個雙位元組字元長度計2,ascii字元計1)
匹配空白行的正規表示式:\n\s*\r
評注:可以用來刪除空白行
匹配html標記的正規表示式:<(\s*?)[^>]*>.*?|<.*? />
評注:網上流傳的版本太糟糕,上面這個也僅僅能匹配部分,對於複雜的巢狀標記依舊無能為力
匹配首尾空白字元的正規表示式:^\s*|\s*$
評注:可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表示式
匹配email位址的正規表示式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
評注:表單驗證時很實用
匹配**url的正規表示式:[a-za-z]+://[^\s]*
評注:網上流傳的版本功能很有限,上面這個基本可以滿足需求
匹配帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-za-z][a-za-z0-9_]$
評注:表單驗證時很實用
匹配國內**號碼:\d-\d|\d-\d
評注:匹配形式如 0511-4405222 或 021-87888822
匹配身份證:\d|\d
評注:中國大陸的身份證為15位或18位
匹配特定數字:
^[1-9]\d*$ //匹配正整數
^-[1-9]\d*$//匹配負整數
^-?[1-9]\d*$//匹配整數
^[1-9]\d*|0$//匹配非負整數(正整數 + 0)
^-[1-9]\d*|0$//匹配非正整數(負整數 + 0)
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$//匹配正浮點數
^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$//匹配負浮點數
^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$//匹配浮點數
^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$//匹配非負浮點數(正浮點數 + 0)
^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ //匹配非正浮點數(負浮點數 + 0)
評注:處理大量資料時有用,具體應用時注意修正
匹配特定字串:
^[a-za-z]+$ //匹配由26個英文本母組成的字串
^[a-z]+$ //匹配由26個英文本母的大寫組成的字串
^[a-z]+$ //匹配由26個英文本母的小寫組成的字串
^[a-za-z0-9]+$ //匹配由數字和26個英文本母組成的字串
^\w+$ //匹配由數字、26個英文本母或者下劃線組成的字串
去除精度緯度中非浮點數
select jd,wd from xx_xa_xsczaqpc t where t.id not in(
select id from xx_xa_xsczaqpc where regexp_like(jd,'^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$')) ;
是雙小數點的數
select xx_jbxx_id,jd,wd from xx_xa_xsczaqpc t where regexp_like(jd,'^[1-9]\d*\.\d*\.\d*[1-9]\d*$')
oracle 正規表示式
with temp as select br.777 1 a from dual union all select bs.6 175 a from dual union all select d.140 supplement 1 a from dual union all select e.191 ...
oracle正規表示式
在資料庫可直接執行下面語句,但在程式中不能執行,regexp like t.ipaddress,25 0 5 2 0 4 0 9 01 0 9 0 9 25 0 5 2 0 4 0 9 01 0 9 0 9 報錯有特殊字元 在句末再加乙個 改為 regexp like t.ipaddress,25 ...
oracle正規表示式
oracle 10g支援正規表示式的四個新函式分別是 regexp like regexp instr regexp substr 和regexp replace。它們使用posix 正規表示式代替了老的百分號 和萬用字元 字元。特殊字元 匹配輸入字串的開始位置,在方括號表示式中使用,此時它表示不接...