原
正規表達式在PLSQL中的使用(附正規表達式文法)
2018年10月08日 14:48:11 寫代碼也要符合基本法 閱讀數 2008 更多 分類專欄: Oracle學習筆記 版權聲明:本文為部落客原創文章,遵循 CC 4.0 by-sa 版權協定,轉載請附上原文出處連結和本聲明。 本文連結: https://blog.csdn.net/liouzch/article/details/82964055
PLSQL中與正規表達式相關的運算函數主要有以下四個:
- REGEXP_LIKE:傳回指定字元串是否符合給定的正規表達式;
- REGEXP_SUBSTR:傳回在指定字元串中截取出的符合給定正規表達式的子串;
- REGEXP_INSTR:傳回在指定字元串中符合給定正規表達式的子串的開始位置;
- REGEXP_REPLACE:傳回将指定字元串中符合給定正規表達式的子串替換為指定子串後的結果。
一、REGEXP_LIKE的使用:
REGEXP_LIKE(String, Regexp)
String:指定字元串或字段内容,
Regexp:用以比對的正規表達式。
例如,驗證某字元串是否是電郵位址格式:
- SELECT
- FROM dual
- WHERE regexp_like( '[email protected]'
- , '^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$');
二、REGEXP_SUBSTR的使用:
REGEXP_SUBSTR(String, Regexp, StartPos, Occurence, Mode)
String:指定字元串或字段内容,
Regexp:用以比對的正規表達式,
StartPos:起始位置(從第幾位開始正規表達式比對),預設為1,
Ocurrence:指定第幾個比對子串,預設為1,
Mode:'i'-不區分大小寫檢索,'c'-區分大小寫檢索,'n'-點号(.)不比對換行符,'m'-多行模式,'x'-忽略正規表達式中的空白字元,預設為'c'。
例如,在字元串中以逗号為分隔符,找到第三個子串:
- SELECT regexp_substr( '張三,男,1994-01-01,順德大良', '[^,]+', , )
- FROM dual;
三、REGEXP_INSTR的使用:
REGEXP_INSTR(String, Regexp, StartPos, Occurence, ReturnOpt, Mode)
String:指定字元串或字段内容,
Regexp:用以比對的正規表達式,
StartPos:起始位置(從第幾位開始正規表達式比對),預設為1,
Ocurrence:指定第幾個比對子串,預設為1,
ReturnOpt:0-傳回出現的開始位置,1-傳回字元發生之後的位置(結束位置+1),預設為0,
Mode:'i'-不區分大小寫檢索,'c'-區分大小寫檢索,'n'-點号(.)不比對換行符,'m'-多行模式,'x'-忽略正規表達式中的空白字元,預設為'c'。
例如,在一句話中以不區分大小寫的要求,找到給定的若幹字母中某一個字母第一次出現的位置:
- SELECT regexp_instr( 'Muhammadun rasul Allah', 'l|m|n', , , , 'i')
- FROM dual;
四、REGEXP_REPLACE的使用:
REGEXP_REPLACE(String, Regexp, ReplaceStr, StartPos, Occurence, Mode)
String:指定字元串或字段内容,
Regexp:用以比對的正規表達式,
ReplaceStr:替換子串,預設為NULL,
StartPos:起始位置(從第幾位開始正規表達式比對),預設為1,
Ocurrence:指定第幾個比對子串,預設為1,
Mode:'i'-不區分大小寫檢索,'c'-區分大小寫檢索,'n'-點号(.)不比對換行符,'m'-多行模式,'x'-忽略正規表達式中的空白字元,預設為'c'。
例如,隐藏手機号中間的四位數字:
SELECT regexp_replace('18806711314', '\d{4}', '大吉大利', , ) FROM dual;
附一:正規表達式基本文法
Metacharacter | Description |
---|---|
^ | 表示比對字元串的開始位置,若用在中括号中[ ] 時,表示不比對括号中字元串 |
$ | 表示比對字元串的結束位置,若設定了表達式對象的Multiline屬性(m),則也比對'/n'或'/r' |
* | 表示比對零次到多次(有或沒有) |
+ | 表示比對一次到多次(至少有一次) |
? | 表示比對零次或一次(至多有一次) |
. | 表示比對單個字元 |
| | 表示為或者,兩項中取一項 |
() | 表示比對括号中全部字元 |
[] | 表示比對括号中一個字元,範圍描述,如[0-9] [a-z] [A-Z] |
{} | 用于限定比對次數,如 {n}表示比對n個字元,{n,}表示至少比對n個字元,{n,m}表示至少n個最多m個 |
\ | 轉義字元,如上基本符号比對都需要轉義字元 ,如 \* 表示比對*号 |
\w | 表示英文字母和數字 |
\W | 表示非字母和數字 |
\d | 表示數字 |
\D | 表示非數字 |
附二:部分常用正規表達式
Description | RegExp |
---|---|
比對由26個英文字母組成的字元串 | ^[A-Za-z]+$ |
比對由26個英文字母的大寫組成的字元串 | ^[A-Z]+$ |
比對由26個英文字母的小寫組成的字元串 | ^[a-z]+$ |
比對由數字和26個英文字母組成的字元串 | ^[A-Za-z0-9]+$ |
比對由數字、26個英文字母或者下劃線組成的字元串 | ^\w+$ |
比對整數 | ^-?[1-9]\d*$ |
比對正整數 | ^[1-9]\d*$ |
比對負整數 | ^-[1-9]\d*$ |
比對非負整數 | ^[1-9]\d*|0$ |
比對非正整數 | ^-[1-9]\d*|0$ |
電子郵箱 | ^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$ |
十六進制字元串 | ^#?([a-f0-9]{6}|[a-f0-9]{3})$ |
URL | ^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$ |
IP位址 | ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ |
HTML标簽 | ^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$ |
SQL語句 | ^(select|drop|delete|create|update|insert).*$ |
大陸郵政編碼 | ^[1-9]\d{5}(?!\d)$ |
純Unicode編碼中的漢字字元串 | ^[u4e00-u9fa5],{0,}$ |
空白行 | \n[\s| ]*\r |
首尾空格 | (^\s*)|(\s*$) |
雙位元組字元(含漢字) | [^\x00-\xff] |
PLSQL中與正規表達式相關的運算函數主要有以下四個: