Oracle、Mysql REGEXP_LIKE正則表達式用法


1.情景展示

oracle和mysql關於正則表達式和對應的函數都一樣。

正則表達式符號介紹:

'^' 匹配輸入字符串的開始位置,在方括號表達式中使用,此時它表示不接受該字符集合。
'$' 匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。
'.' 匹配除換行符之外的任何單字符。
'?' 匹配前面的子表達式零次或一次。
'+' 匹配前面的子表達式一次或多次。
'*' 匹配前面的子表達式零次或多次。
'|' 指明兩項之間的一個選擇。例子'^([a-z]+|[0-9]+)$'表示所有小寫字母或數字組合成的字符串。
'( )' 標記一個子表達式的開始和結束位置。
'[]' 標記一個中括號表達式。
'{m,n}' 一個精確地出現次數范圍,m=<出現次數<=n,'{m}'表示出現m次,'{m,}'表示至少出現m次。
\num 匹配 num,其中 num 是一個正整數。對所獲取的匹配的引用。
字符簇: 
[[:alpha:]] 任何字母。
[[:digit:]] 任何數字。
[[:alnum:]] 任何字母和數字。
[[:space:]] 任何白字符。
[[:upper:]] 任何大寫字母。
[[:lower:]] 任何小寫字母。
[[:punct:]] 任何標點符號。
[[:xdigit:]] 任何16進制的數字,相當於[0-9a-fA-F]。

各種操作符的運算優先級:
\轉義符
(), (?:), (?=), [] 圓括號和方括號
*, +, ?, {n}, {n,}, {n,m} 限定符
^, $, anymetacharacter 位置和順序

*/

2.REGEXP_LIKE()

與LIKE的功能相似,區別在於:可以使用正則表達式;

基本用法:

-- 查詢THEMECODE字段值包含36的記錄
select * from meta_theme where regexp_like(THEMECODE,'36');

相當於:

select * from meta_theme where THEMECODE like '%36%';

只包含數字0-9或小數點

regexp_like(str,'^[0-9\.]+$')

只包含純數字的四種實現方式

regexp_like(str,'^[0-9]+[0-9]$');
regexp_like(str,'^[0-9]+$');
regexp_like(str,'^[[:digit:]]+$');
not regexp_like(str,'[^0-9]');

'+' 匹配前面的子表達式一次或多次;

^表示排除。

不是純數字0-9的兩種實現方式

regexp_like(str,'[^0-9]');  -- ^表示排除
not regexp_like(str,'^[[:digit:]]+$');

只包含0-9和-字符的兩種實現方式

regexp_like(str,'[0-9-]');
regexp_like(str,'^[0-9]|[-]$');

'|' 指明兩項之間的一個選擇,相當於or。

只包含0-9,-字符, 或者空格的五種實現方式

regexp_like(str,'^[0-9]|[-]$') or regexp_like(str,'^[ ]$');
regexp_like(str,'^[0-9]|[-]$|^[ ]$');  
regexp_like(str,'(^[0-9]|[-]$)|(^[ ]$)');
regexp_like(str,'^[0-9]|[-]|[ ]$');
regexp_like(str,'[0-9- ]');

 

3.REGEXP_INSTR()

與INSTR()的功能相似,區別在於:可以使用正則表達式;

 

4.REGEXP_SUBSTR()

與SUBSTR()的功能相似,區別在於:可以使用正則表達式;

將字符串按照匹配模式拆分成N組數據,可選擇返回哪一組數據。

function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr :需要進行正則處理的字符串
__pattern :進行匹配的正則表達式
__position :起始位置,從第幾個字符開始正則表達式匹配(默認為1)
__occurrence :標識第幾個匹配組,默認為1
__modifier :模式('i'不區分大小寫進行檢索;'c'區分大小寫進行檢索。默認為'c'。)

5.REGEXP_REPLACE()

與REPLACE()的功能相似,區別在於:可以使用正則表達式;

可以利用正則表達式,替換或者提取字段內容。

-- 替換
select regexp_replace('hjbfgcoqwue8723r8fhescb938r','[^0-9]','-');
-- 提取
select regexp_replace('hjbfgcoqwue8723r8fhescb938r','[^0-9]','') from dual;

6.常用正則表達式

匹配數字

^[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個英文字母或者下划線組成的字符串

十六進制值:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/
電子郵箱:/^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/
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+\/>)$/
Unicode編碼中的漢字范圍:/^[u4e00-u9fa5],{0,}$/
匹配中文字符的正則表達式: [\u4e00-\u9fa5]
匹配空白行的正則表達式:\n\s*\r
匹配HTML標記的正則表達式:<(\S*?)[^>]*>.*?|<.*? />
說明:上面這個也僅僅能匹配部分,對於復雜的嵌套標記依舊無能為力
匹配首尾空白字符的正則表達式:^\s*|\s*$
說明:可以用來刪除行首行尾的空白字符(包括空格、制表符、換頁符等等),非常有用的表達式
匹配Email地址的正則表達式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
說明:表單驗證時很實用
匹配網址URL的正則表達式:[a-zA-z]+://[^\s]*
匹配國內電話號碼:\d{3}-\d{8}|\d{4}-\d{7}
說明:匹配形式如 0511-4405222 或 021-87888822
匹配騰訊QQ號:[1-9][0-9]{4,}
說明:騰訊QQ號從10000開始
匹配中國大陸郵政編碼:[1-9]\d{5}(?!\d)
說明:中國大陸郵政編碼為6位數字
匹配身份證:\d{15}|\d{18}
匹配ip地址:\d+\.\d+\.\d+\.\d+

2021年12月28日14:24:18

以英文字符結尾:'^.*[A-Za-z]$'

UPDATE meta_theme SET THEMETYPE=2 WHERE  regexp_like(THEMENAME, '^.*[A-Za-z]$');

 

NOT REGEXP_LIKE(字段名稱,正則表達式) 

UPDATE meta_theme SET THEMETYPE=1 WHERE not regexp_like(THEMENAME, '^.*[A-Za-z]$');

表行數總計:

上面兩條數據之和與該值相等,所以說,正則表達式的like是沒有問題的。

只保留字符串當中的中文:[\u4e00-\u9fa5]

通過regexp_replace()來實現。

去除字符串當中的中文:[^\u4e00-\u9fa5]

\u表示按unicode匹配某些規則;
漢字的表示范圍:\u4e00-\u9fa5

數字表示范圍:\u0030-\u0039
英文表示范圍:\u0041-\u005A,\u0061-\u007A

示例1:篩選字段值以英文結尾的數據,並將數據當中的中文進行剔除。

示例2:篩選字段值以_開頭的數據,並去掉該字符。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM