亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

oracle正則表達(dá)式多項(xiàng)匹配時(shí)相似項(xiàng)有優(yōu)先級(jí)詳解

瀏覽:148日期:2023-09-12 20:47:51
目錄前言: 一、正則表達(dá)式用法(Regexp_Like為例)1、語(yǔ)法規(guī)則2、注釋3、實(shí)例二、正則表達(dá)式優(yōu)先級(jí)的注意點(diǎn)三、解決方案擴(kuò)展:1、正則表達(dá)式過(guò)長(zhǎng)2、替換規(guī)則失效四、總結(jié) 前言:

Oracle常用正則表達(dá)式函數(shù)主要以下5個(gè):

REGEXP_LIKE:與LIKE的功能相似;REGEXP_SUBSTR :與SUBSTR的功能相似;REGEXP_INSTR :與INSTR的功能相似;REGEXP_REPLACE :與REPLACE的功能相似;REGEXP_COUNT :與COUNT的功能相似;

常用的正則表達(dá)式匹配符有以下運(yùn)算符,本文重點(diǎn)來(lái)闡述“|”指定多個(gè)選項(xiàng),容易被忽視的問(wèn)題。

一、正則表達(dá)式用法(Regexp_Like為例)

Regexp_Like()函數(shù) 模糊匹配。

1、語(yǔ)法規(guī)則

regexp_like(source_string,pattern[match_parameter])

2、注釋source_string:傳入的字符串,可以是常量,也可以是某個(gè)值類型為串的列;pattern:要進(jìn)行匹配的字符串;match_parameter:文本量,進(jìn)一步訂制搜索,取值如下:‘i’ 用于不區(qū)分大小寫的匹配。‘c’ 用于區(qū)分大小寫的匹配。‘n’ 允許將句點(diǎn)“.”作為通配符來(lái)匹配換行符。如果省略該參數(shù),句點(diǎn)將不匹配換行符。‘m’ 將源串視為多行。即將“^”和“$”分別看做源串中任意位置任意行的開(kāi)始和結(jié)束,而不是看作整個(gè)源串的開(kāi)始或結(jié)束。如果省略該參數(shù),源串將被看作一行來(lái)處理。

如果取值不屬于上述中的某個(gè),將會(huì)報(bào)錯(cuò)。如果指定了多個(gè)互相矛盾的值,將使用最后一個(gè)值。如’ic’會(huì)被當(dāng)做’c’處理。省略該參數(shù)時(shí):默認(rèn)區(qū)分大小寫、句點(diǎn)不匹配換行符、源串被看作一行。

3、實(shí)例

代碼:

select * from (select 'ABC你好' reg from dual union select 'a233' reg from dual)where regexp_like(reg,'[0-9]','c')--匹配有數(shù)字的字符串

效果:

解析:

可以看到正則表達(dá)式,通過(guò)后面的'[0-9]'的規(guī)則來(lái)獲取我們想要的數(shù)據(jù)。

二、正則表達(dá)式優(yōu)先級(jí)的注意點(diǎn)

當(dāng)我們使用REGEXP_REPLACE將多個(gè)表達(dá)式的數(shù)據(jù)替換時(shí),這時(shí)候我們要考慮替換規(guī)則有沒(méi)有類似項(xiàng),比如REGEXP_REPLACE(reg,'-BL|-BL1')即替換掉字符串reg里面包含-BL或者-BL1的字符串,此時(shí)如果我們按這種寫法REGEXP_REPLACE(reg,'-BL|-BL1'),實(shí)際效果是只會(huì)替換掉-BL,因?yàn)閛racle會(huì)按照替換規(guī)則的順序來(lái)執(zhí)行,如果滿足了第一個(gè)條件,后面的就不會(huì)再去執(zhí)行了,這也是為了加快了程序的處理速度,但同時(shí)也會(huì)造成我們常常忽略的問(wèn)題。

好的,我們來(lái)看看下面的具體案例吧。

代碼:

select reg, REGEXP_REPLACE(reg,'-BL|-BL1')reg_replace from (select 'A_123456D-BL1' reg FROM dual)

效果:

解析:

因?yàn)檎齽t表達(dá)式,默認(rèn)會(huì)按順序執(zhí)行,此時(shí)正則表達(dá)式,-BL滿足規(guī)則了,就不會(huì)執(zhí)行-BL1了,因此就會(huì)得到的結(jié)果是對(duì)應(yīng)的REG字符串里面替換后還會(huì)多出了一個(gè)1。

三、解決方案

現(xiàn)實(shí)情況下,我們往往會(huì)有很多替換規(guī)則,少則幾個(gè),多則好幾百,如果我們用replace函數(shù)估計(jì)要嵌套幾百次,估計(jì)你會(huì)直搖頭吧,雖然regexp_replace可以一次性將多個(gè)規(guī)則寫在一起,但是我們還是要注意上述提到的優(yōu)先級(jí)的問(wèn)題。因此我們需要將相同的部分放到最后,如上面說(shuō)到的“-BL”此時(shí)就能達(dá)到我們的需求了。

擴(kuò)展:

我們來(lái)看個(gè)現(xiàn)實(shí)的案例。當(dāng)面對(duì)168個(gè)規(guī)則時(shí)我們會(huì)遇到哪些問(wèn)題。

1、正則表達(dá)式過(guò)長(zhǎng)

解決方法:嵌套多個(gè)正則表達(dá)式 ,像竹筍一樣多疊幾層即可。

2、替換規(guī)則失效

出來(lái)的數(shù)據(jù)還是有我們不想要的數(shù)據(jù),比如下面的三個(gè)批次,我們只想保存一條,如果我們替換規(guī)則不當(dāng)就會(huì)造成,這三個(gè)字符串替換后還是不相同的,無(wú)法達(dá)到我們想要的效果。

解決辦法:我們首先將所有的替換規(guī)則用EXCEL表例好,然后排好優(yōu)先級(jí),然后再去修改正則表達(dá)式。如圖所示我們將規(guī)則列好,然后用不同顏色標(biāo)示優(yōu)先級(jí)。然后再整理表達(dá)式。如下圖所示小編將最小匹配項(xiàng)的表達(dá)式放到最后面了,這樣就能達(dá)到我們想要的效果了。

四、總結(jié)

針對(duì)復(fù)雜的數(shù)據(jù)分析,首先建議從業(yè)務(wù)角度去規(guī)范,因?yàn)殡m然技術(shù)可以處理,但是歷史數(shù)據(jù)處理成本是巨大,因此一個(gè)企業(yè)的數(shù)據(jù)底座搭建,是離不開(kāi)強(qiáng)標(biāo)準(zhǔn)化的數(shù)據(jù)治理的。

到此這篇關(guān)于oracle正則表達(dá)式多項(xiàng)匹配時(shí)相似項(xiàng)有優(yōu)先級(jí)的文章就介紹到這了,更多相關(guān)oracle正則表達(dá)式多項(xiàng)匹配內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

主站蜘蛛池模板: 久久精品www| 欧美日韩免费一区二区在线观看 | 国产精品麻豆一区二区三区v视界 | 男人的天堂精品国产一区 | 日韩免费一级a毛片在线播放一级 | 国产精品嘿咻嘿咻在线播放 | 一本色道久久综合亚洲精品 | 国产成人午夜福在线观看 | 久热免费在线观看 | 中文字幕人成乱码在线观看 | 一级一级 a爱片免费视频 | 日本在线观看不卡免费视频 | 亚洲视频在线一区 | 欧美一级毛片一级 | 久草视频免费在线播放 | 免费观看女人一摸全是水 | 国产精品一区二区综合 | 久久99九九99九九精品 | 一区二区不卡视频在线观看 | 久久99精品久久久久久三级 | 最新国产精品亚洲 | 香港激情三级做爰小说 | 91成人午夜性a一级毛片 | 一级毛片成人免费看免费不卡 | 欧美一区二区三区视频 | 亚洲精品一区二区三区四区 | 日韩啪| 久久www免费人成_看片高清 | 国产高清在线免费视频 | 一级欧美一级日韩片 | 在线观看国产亚洲 | 在线a亚洲视频播放在线观看 | 久草福利资源 | 久久亚洲视频 | 全国男人天堂网 | 国产成人午夜 | 国产美女啪 | 欧美在线一级精品 | 三级三级三级全黄 | 亚洲三及片| 日本视频一区二区三区 |