亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Oracle數(shù)據(jù)庫中使用正則表達(dá)式的超詳細(xì)教程

 更新時間:2024年08月12日 10:53:43   作者:engchina  
正則表達(dá)式是一種描述簡單和復(fù)雜的搜索和處理模式的方法,下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫中使用正則表達(dá)式的超詳細(xì)教程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

0. 引言

本文介紹 Oracle 數(shù)據(jù)庫的正則表達(dá)式支持。本文涵蓋以下主題:

  • 什么是正則表達(dá)式?
  • Oracle 數(shù)據(jù)庫正則表達(dá)式支持
  • 用于正則表達(dá)式的 Oracle 數(shù)據(jù)庫 SQL 函數(shù)
  • 正則表達(dá)式中支持的元字符
  • 構(gòu)建正則表達(dá)式

1. 什么是正則表達(dá)式?

正則表達(dá)式使用標(biāo)準(zhǔn)化語法約定指定要在字符串?dāng)?shù)據(jù)中搜索的模式。正則表達(dá)式可以指定復(fù)雜的字符序列模式。例如,以下正則表達(dá)式:

a(b|c)d

搜索模式:“a”,后跟“b”或“c”,最后跟“d”。此正則表達(dá)式同時匹配“abd”和“acd”。

正則表達(dá)式使用兩種類型的字符指定:

  • 元字符——指定執(zhí)行搜索的算法的運(yùn)算符。
  • 文字——要搜索的實(shí)際字符。

2. Oracle 數(shù)據(jù)庫正則表達(dá)式支持

Oracle 數(shù)據(jù)庫實(shí)現(xiàn)了符合 POSIX 擴(kuò)展正則表達(dá)式 (ERE) 規(guī)范的正則表達(dá)式支持。

正則表達(dá)式支持是通過一組 Oracle 數(shù)據(jù)庫 SQL 函數(shù)實(shí)現(xiàn)的,這些函數(shù)允許您搜索和操作字符串?dāng)?shù)據(jù)。您可以在任何使用 Oracle 數(shù)據(jù)庫 SQL 的環(huán)境中使用這些函數(shù)。有關(guān)詳細(xì)信息,請參閱本章后面的“用于正則表達(dá)式的 Oracle 數(shù)據(jù)庫 SQL 函數(shù)”。

Oracle 數(shù)據(jù)庫支持正則表達(dá)式中使用的一組常見元字符。支持的元字符和相關(guān)功能的行為在“正則表達(dá)式中支持的元字符”中進(jìn)行了描述。

業(yè)界支持正則表達(dá)式的工具之間對元字符的解釋有所不同。如果您要將正則表達(dá)式從其他環(huán)境移植到 Oracle 數(shù)據(jù)庫,請確保正則表達(dá)式語法受支持并且行為符合您的預(yù)期。

3. 用于正則表達(dá)式的 Oracle 數(shù)據(jù)庫 SQL 函數(shù)

數(shù)據(jù)庫提供了一組 SQL 函數(shù),允許您使用正則表達(dá)式搜索和操作字符串。您可以在任何保存字符數(shù)據(jù)的數(shù)據(jù)類型(例如 CHAR、NCHAR、CLOB、NCLOB、NVARCHAR2 和 VARCHAR2)上使用這些函數(shù)。

正則表達(dá)式必須用單引號括起來。這樣做可以確保 SQL 函數(shù)解釋整個表達(dá)式,并可以提高代碼的可讀性。

下表給出了每個正則表達(dá)式函數(shù)的簡要說明。

SQL FunctionDescription
REGEXP_LIKE該函數(shù)在字符列中搜索模式。在查詢的 WHERE 子句中使用此函數(shù)可返回與您指定的正則表達(dá)式匹配的行。
REGEXP_REPLACE此函數(shù)在字符列中搜索模式,并用您指定的模式替換每次出現(xiàn)的該模式。
REGEXP_INSTR該函數(shù)在字符串中搜索給定的正則表達(dá)式模式。您指定要查找的出現(xiàn)位置以及搜索的起始位置。此函數(shù)返回一個整數(shù),指示在字符串中找到匹配項(xiàng)的位置。
REGEXP_SUBSTR此函數(shù)返回與您指定的正則表達(dá)式模式匹配的實(shí)際子字符串。

4. 正則表達(dá)式中支持的元字符

下表列出了支持在傳遞給 SQL 正則表達(dá)式函數(shù)的正則表達(dá)式中使用的元字符。有關(guān)這些元字符的匹配行為的詳細(xì)信息在“構(gòu)造正則表達(dá)式”中給出。

Metacharacter SyntaxOperator NameDescription
.任意字符——點(diǎn)匹配任意字符
+一個或多個——加上量詞匹配前面的子表達(dá)式的一次或多次出現(xiàn)
?零或一——問號量詞匹配前面的子表達(dá)式零次或一次出現(xiàn)
*零或更多——星量詞匹配前面的子表達(dá)式零次或多次出現(xiàn)
{m}間隔–精確計(jì)數(shù)精確匹配前面子表達(dá)式的 m 次出現(xiàn)
{m,}間隔——至少計(jì)數(shù)匹配至少 m 次出現(xiàn)的前面的子表達(dá)式
{m,n}間隔–計(jì)數(shù)之間匹配至少 m ,但不超過 n 出現(xiàn)的前面的子表達(dá)式
[ … ]匹配字符列表匹配列表中的任意字符 …
[^ … ]不匹配的字符列表匹配列表中不存在的任何字符 …
|Or‘a|b’ 匹配字符“a”或“b”。
( … )子表達(dá)式或分組將表達(dá)式 … 視為一個單元。子表達(dá)式可以是文字字符串或包含運(yùn)算符的復(fù)雜表達(dá)式。
\n子表達(dá)式或分組將表達(dá)式 … 視為一個單元。子表達(dá)式可以是文字字符串或包含運(yùn)算符的復(fù)雜表達(dá)式。
\轉(zhuǎn)義字符將表達(dá)式中的后續(xù)元字符視為文字。
^線錨點(diǎn)的起點(diǎn)僅當(dāng)后續(xù)表達(dá)式出現(xiàn)在行首時才匹配它。
$行末錨點(diǎn)僅當(dāng)前面的表達(dá)式出現(xiàn)在行尾時才匹配它。
[:class:]POSIX 字符類匹配屬于指定字符 class 的任何字符??梢栽谌魏瘟斜肀磉_(dá)式中使用。
[.element.]POSIX 整理序列指定要在正則表達(dá)式中使用的整理順序。您使用的 element 必須是當(dāng)前區(qū)域設(shè)置中定義的整理序列。
[=character=]POSIX 字符等效類匹配與您指定的 character 具有相同基本字符的字符。

5. 構(gòu)建正則表達(dá)式

使用正則表達(dá)式進(jìn)行基本字符串匹配

可以使用正則表達(dá)式執(zhí)行的最簡單的匹配是基本字符串匹配。對于這種類型的匹配,正則表達(dá)式是不帶元字符的文字字符串。例如,要查找序列“abc”,請指定正則表達(dá)式:

abc

子表達(dá)式的正則表達(dá)式運(yùn)算

如前所述,正則表達(dá)式是使用元字符和文字構(gòu)造的。對單個文字進(jìn)行操作的元字符,例如“+”和“?”還可以對文字序列或整個表達(dá)式進(jìn)行操作。為此,您可以使用分組運(yùn)算符將序列或子表達(dá)式括起來。有關(guān)分組的更多信息,請參閱“子表達(dá)式”。

正則表達(dá)式運(yùn)算符和元字符用法

匹配任何字符–點(diǎn),點(diǎn)運(yùn)算符 ‘.’ 匹配當(dāng)前字符集中的任何單個字符。例如,要查找序列(“a”,后跟任何字符,后跟“c”),請使用以下表達(dá)式:

a.c

該表達(dá)式匹配以下所有序列:

abc
adc
a1c
a&c

表達(dá)式不匹配:

abb

一個或多個——加上,一個或多個運(yùn)算符 ‘+’ 與前面的表達(dá)式的一個或多個匹配項(xiàng)相匹配。例如,要查找字符“a”的一次或多次出現(xiàn),可以使用正則表達(dá)式:

a+

該表達(dá)式匹配以下所有內(nèi)容:

a
aa
aaa

表達(dá)式不匹配:

bbb

零或一——問號運(yùn)算符,問號與前面的字符或子表達(dá)式的零次或一次(并且僅一次)匹配。您可以將此運(yùn)算符視為指定源文本中可選的表達(dá)式。例如,要查找“a”,可選地后跟“b”,然后后跟“c”,您可以使用以下正則表達(dá)式:

ab?c

該表達(dá)式匹配:

abc
ac

表達(dá)式不匹配:

adc
abbc

零個或更多——星星,零個或多個運(yùn)算符 ‘*’ 匹配零個或多次出現(xiàn)的前面的字符或子表達(dá)式。例如,要查找“a”,后跟零個或多次出現(xiàn)的“b”,然后是“c”,請使用正則表達(dá)式:

ab*c

該表達(dá)式匹配以下所有序列:

ac
abc
abbc
abbbbc

表達(dá)式不匹配:

adc

間隔–精確計(jì)數(shù),精確計(jì)數(shù)間隔運(yùn)算符用大括號內(nèi)的單個數(shù)字指定。您可以使用此運(yùn)算符來搜索前面的字符或子表達(dá)式的確切出現(xiàn)次數(shù)。例如,要查找“a”恰好出現(xiàn) 5 次的位置,您可以指定正則表達(dá)式:

a{5}

該表達(dá)式匹配:

aaaaa

表達(dá)式不匹配:

aaaa

間隔——至少計(jì)數(shù),您可以使用至少計(jì)數(shù)間隔運(yùn)算符來搜索前面的字符或子表達(dá)式出現(xiàn)指定次數(shù)或多次的情況。例如,要查找“a”至少出現(xiàn) 3 次的位置,可以使用正則表達(dá)式:

a{3,}

該表達(dá)式匹配以下所有內(nèi)容:

aaa
aaaaa

表達(dá)式不匹配:

aa

間隔–計(jì)數(shù)之間,您可以使用計(jì)數(shù)間隔運(yùn)算符來搜索指定范圍內(nèi)的出現(xiàn)次數(shù)。例如,要查找“a”出現(xiàn)至少 3 次但不超過 5 次的位置,可以使用以下正則表達(dá)式:

a{3,5}

該表達(dá)式匹配以下所有序列:

aaa
aaaa
aaaaa

表達(dá)式不匹配:

aa

匹配字符列表,您可以使用匹配字符列表來搜索列表中出現(xiàn)的任何字符。例如,要查找“a”、“b”或“c”,請使用以下正則表達(dá)式:

[abc]

此表達(dá)式匹配以下每個字符串中的第一個字符:

at
bet
cot

表達(dá)式不匹配:

def

字符列表中允許使用以下正則表達(dá)式運(yùn)算符,字符列表中包含的任何其他元字符都會失去其特殊含義(被視為文字):

  • 范圍運(yùn)算符 ‘-’
  • POSIX 字符類 [: :]
  • POSIX 整理序列 [. .]
  • POSIX 字符等效類 [= =]

不匹配的字符列表,使用非匹配字符列表指定您不想匹配的字符。不在非匹配字符列表中的字符將作為匹配項(xiàng)返回。例如,要從搜索結(jié)果中排除字符“a”、“b”和“c”,請使用以下正則表達(dá)式:

[^abc]

此表達(dá)式匹配以下字符串中的字符“d”和“g”:

abcdef
ghi

表達(dá)式不匹配:

abc

與匹配字符列表一樣,非匹配字符列表中允許使用以下正則表達(dá)式運(yùn)算符(字符列表中包含的任何其他元字符都將被忽略):

  • 范圍運(yùn)算符 ‘-’
  • POSIX 字符類 [: :]
  • POSIX 整理序列 [. .]
  • POSIX 字符等效類 [= =]

例如,以下正則表達(dá)式從搜索結(jié)果中排除“a”和“i”之間的任何字符:

[^a-i]

此表達(dá)式與以下字符串中的字符“j”和“l”匹配:

hijk
lmn

表達(dá)式與字符不匹配:

abcdefghi

使用 Or 運(yùn)算符 ‘|’ 指定替代表達(dá)式。例如,要匹配“a”或“b”,請使用以下正則表達(dá)式:

a|b

子表達(dá)式,您可以使用子表達(dá)式運(yùn)算符將要查找的字符分組為字符串或創(chuàng)建復(fù)雜的表達(dá)式。例如,要查找后跟“def”的可選字符串“abc”,請使用以下正則表達(dá)式:

(abc)?def

此表達(dá)式與以下字符串中的字符串“abcdef”和“def”匹配:

abcdefghi
defghi

表達(dá)式與字符串不匹配:

ghi

反向引用,反向引用可讓您搜索重復(fù)的表達(dá)式。您可以使用 ‘\n’ 指定反向引用,其中 n 是 1 到 9 之間的整數(shù),表示 n th,

反向引用可讓您搜索重復(fù)的表達(dá)式。您可以使用 '\ n ' 指定反向引用,其中 n 是 1 到 9 之間的整數(shù),表示 n th

例如,要查找重復(fù)出現(xiàn)的字符串“abc”或“def”,請使用以下正則表達(dá)式:

(abc|def)\1

該表達(dá)式匹配以下字符串:

abcabc
defdef

該表達(dá)式與以下字符串不匹配:

abcdef
abc

反向引用從每個前面的子表達(dá)式的左括號開始從左到右對子表達(dá)式進(jìn)行計(jì)數(shù)。

反向引用允許您搜索重復(fù)的字符串,而無需提前知道實(shí)際的字符串。例如,正則表達(dá)式:

^(.*)\1$ 

匹配由同一字符串的兩個相鄰出現(xiàn)組成的行。

轉(zhuǎn)義字符,使用轉(zhuǎn)義字符 ‘’ 搜索通常被視為元字符的字符。例如,要搜索“+”字符,請使用以下正則表達(dá)式:

\+

此表達(dá)式與以下字符串中的加號“+”匹配:

abc+def

表達(dá)式與字符串中的任何字符都不匹配:

abcdef

線錨點(diǎn)的起點(diǎn),使用行開頭錨點(diǎn) ^ 搜索僅出現(xiàn)在行開頭的表達(dá)式。例如,要查找行開頭出現(xiàn)的字符串 def ,請使用以下表達(dá)式:

^def

此表達(dá)式與字符串中的 def 匹配:

defghi

該表達(dá)式與以下字符串中的 def 不匹配:

abcdef

行末錨點(diǎn),行尾錨元字符 ‘$’ 允許您搜索僅出現(xiàn)在行尾的表達(dá)式。例如,要查找出現(xiàn)在行尾的 def ,請使用以下表達(dá)式:

def$

此表達(dá)式與字符串中的 def 匹配:

abcdef

該表達(dá)式與以下字符串中的 def 不匹配:

defghi

POSIX 字符類,POSIX 字符類運(yùn)算符允許您在字符列表中搜索屬于特定 POSIX 字符類成員的表達(dá)式。您可以使用此運(yùn)算符搜索具有特定格式的字符(例如大寫字符),也可以搜索特殊字符(例如數(shù)字或標(biāo)點(diǎn)符號字符)。支持全套 POSIX 字符類。

要使用此運(yùn)算符,請使用語法 [: class :] 指定表達(dá)式,其中 class 是要搜索的 POSIX 字符類的名稱為了。例如,要搜索一個或多個連續(xù)的大寫字符,請使用以下正則表達(dá)式:

[[:upper:]]+

此表達(dá)式與字符串中的“DEF”匹配:

abcDEFghi

該表達(dá)式不返回以下字符串的匹配項(xiàng):

abcdefghi

POSIX 整理序列,POSIX 整理序列元素運(yùn)算符 [. .] 允許您在正則表達(dá)式中使用整理序列。您指定的元素必須是當(dāng)前語言環(huán)境中定義的整理序列。

此運(yùn)算符允許您在正則表達(dá)式中使用多字符整理序列,否則只允許使用一個字符。例如,您可以使用此運(yùn)算符來確保整理序列“ch”(在西班牙語等語言環(huán)境中定義時)在取決于字符順序的操作中被視為一個字符。

要使用整理序列運(yùn)算符,請指定 [. element .] ,其中 element 是您要查找的整理序列。您可以使用當(dāng)前區(qū)域設(shè)置中定義的任何整理序列,包括單字符元素和多字符元素。

例如,要查找整理序列“ch”,請使用以下正則表達(dá)式:

[[.ch.]]

此表達(dá)式與以下字符串中的序列“ch”匹配:

chabc

該表達(dá)式與以下字符串不匹配:

cdefg

您可以在需要排序規(guī)則的任何正則表達(dá)式中使用排序序列運(yùn)算符。例如,要指定從“a”到“ch”的范圍,可以使用以下表達(dá)式:

[a-[.ch.]]

POSIX 字符等效類,使用 POSIX 字符等效類運(yùn)算符搜索當(dāng)前區(qū)域設(shè)置中等效的字符。例如,查找西班牙語字符“ñ”以及“n”。

要使用此運(yùn)算符,請指定 [= character =] ,以查找與指定 character .

例如,以下正則表達(dá)式可用于在西班牙語語言環(huán)境中搜索相當(dāng)于“n”的字符:

[[=n=]]

此表達(dá)式與以下字符串中的“N”和“ñ”匹配:

El Ni?o 

完結(jié)!

refer: https://docs.oracle.com/cd/B13789_01/appdev.101/b10795/adfns_re.htm#1007566

總結(jié)

到此這篇關(guān)于Oracle數(shù)據(jù)庫中使用正則表達(dá)式的文章就介紹到這了,更多相關(guān)Oracle數(shù)據(jù)庫正則表達(dá)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Oracle去除重復(fù)數(shù)據(jù)

    Oracle去除重復(fù)數(shù)據(jù)

    這篇文章介紹了Oracle去除重復(fù)數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • oracle導(dǎo)出sql語句的結(jié)果集和保存執(zhí)行的sql語句(深入分析)

    oracle導(dǎo)出sql語句的結(jié)果集和保存執(zhí)行的sql語句(深入分析)

    本篇文章是對oracle導(dǎo)出sql語句的結(jié)果集與保存執(zhí)行的sql語句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Oracle 數(shù)據(jù)庫優(yōu)化實(shí)戰(zhàn)心得總結(jié)

    Oracle 數(shù)據(jù)庫優(yōu)化實(shí)戰(zhàn)心得總結(jié)

    優(yōu)化sql語句、優(yōu)化io、表設(shè)計(jì)優(yōu)化、充分利用系統(tǒng)cpu資源、優(yōu)化數(shù)據(jù)庫連接、充分利用數(shù)據(jù)的后臺處理方案減少網(wǎng)絡(luò)流量,實(shí)施系統(tǒng)資源管理分配計(jì)劃等等,感興趣的朋友可以參考下哈
    2013-06-06
  • oracle中的procedure編寫和使用詳解

    oracle中的procedure編寫和使用詳解

    這篇文章主要介紹了oracle中的procedure編寫和使用詳解的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • Oracle 中檢查臨時表空間的方法

    Oracle 中檢查臨時表空間的方法

    這篇文章主要介紹了Oracle 中檢查臨時表空間的方法,這是一個非常重要的表空間,如果管理不當(dāng),可能會出現(xiàn)問題,讓我們看看臨時表空間管理的各種查詢,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • Oracle隨機(jī)函數(shù)之dbms_random使用詳解

    Oracle隨機(jī)函數(shù)之dbms_random使用詳解

    dbms_random是oracle提供的一個隨機(jī)函數(shù)包,本文將詳細(xì)介紹函數(shù)的使用,需要的朋友可以參考下
    2012-12-12
  • 詳解Oracle的sqlldr理論

    詳解Oracle的sqlldr理論

    這篇文章主要介紹了詳解Oracle的sqlldr理論,SQL*LOADER是ORACLE的數(shù)據(jù)加載工具,通常用來將操作系統(tǒng)文件(數(shù)據(jù))遷移到ORACLE數(shù)據(jù)庫中,SQL*LOADER是大型數(shù)據(jù)倉庫選擇使用的加載方法,因?yàn)樗峁┝俗羁焖俚耐緩?DIRECT,PARALLEL),需要的朋友可以參考下
    2023-07-07
  • oracle 優(yōu)化的一點(diǎn)體會

    oracle 優(yōu)化的一點(diǎn)體會

    oracle 優(yōu)化的一點(diǎn)體會大家可以參考下,提升運(yùn)行效率。
    2009-10-10
  • Oracle內(nèi)存分配不足的過程解析(業(yè)務(wù)干掛數(shù)據(jù)庫)

    Oracle內(nèi)存分配不足的過程解析(業(yè)務(wù)干掛數(shù)據(jù)庫)

    本文介紹了Oracle數(shù)據(jù)庫內(nèi)存分配不足的問題,原因主要是業(yè)務(wù)劇增導(dǎo)致的內(nèi)存不足,通過分析AAS負(fù)載、等待事件、transactions和阻塞情況,發(fā)現(xiàn)PGA內(nèi)存出現(xiàn)了嚴(yán)重抖動,感興趣的朋友一起看看吧
    2025-02-02
  • ORACLE 如何查詢被鎖定表及如何解鎖釋放session

    ORACLE 如何查詢被鎖定表及如何解鎖釋放session

    后臺數(shù)據(jù)庫操作某一個表時發(fā)現(xiàn)一直出于假死狀態(tài),可能是該表被某一用戶鎖定,接下來為你詳細(xì)介紹下查詢被鎖定表及如何解鎖,感興趣的你可以參考下,希望可以幫助到你
    2013-03-03

最新評論