返回顶部
首页 > 资讯 > 数据库 >oracle中如何使用正则函数
  • 451
分享到

oracle中如何使用正则函数

2024-04-02 19:04:59 451人浏览 八月长安
摘要

oracle中如何使用正则函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用这些函数可以在字符串中搜索字符模式。例如,假设

oracle中如何使用正则函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

使用这些函数可以在字符串中搜索字符模式。例如,假设有下列年份:

 1965
1968
1971
1970

如果希望获得1965年和1968年之间的年份(包括1965年和1968年),就可以使用下面的正则表达式实现这种功能:

 ^196[5-8]$

正则表达式中包含许多元字符(metacharacter)。在上面这个例子中,^、[5-8]以及$都是元字符。^可以匹配一个字符串的开头;[5-8]可以匹配介于5~8之间的数字;$可以匹配一个字符串的结尾。因此,^196可以匹配以196开头的字符串;[5-8]$可以匹配以5、6、7或8结尾的字符串。而^196[5-8]$就可以匹配1965、1966、1967和1968,这就是想要的结果。

在下面这个例子中,假设有如下字符串,其中引用了莎士比亚的《罗密欧与朱丽叶》中的一句台词:

 But, soft! What light through yonder window breaks?

如果想查找子字符串light,可以对引用的字符串应用下面的正则表达式:

 l[[:alpha:]]{4}

在这个例子中,[[:alpha:]]和{4}都是元字符。[[:alpha:]]可以匹配A-Z或a-z之间的字符;{4}表示前面的匹配模式可以重复4次。当l、[[:alpha:]]和{4}一起使用时,可以匹配以 l 开头的5个字母组成的序列。因此,当对这个字符串应用正则表达式 l[[:alpha:]]{4}时,就可以匹配子字符串light。

表4-7列出了在正则表达式中可以使用的部分元字符,同时还给出了这些元字符的意思以及使用这些元字符的简单例子。

表4-7  正则表达式中的元字符

元  字 符

意    思

例    子

\

说明要匹配的字符是一个特殊字符、常量或者反向引用。(反向引用重复上一次匹配。)

\n 匹配换行符

\\ 匹配 \

\( 匹配(

\) 匹配)

^

匹配字符串的开头位置

如果A是字符串中的第一个字符,^A 匹配A

$

匹配字符串的末尾位置

如果B是字符串中的最后一个字符,$B匹配B

*

匹配前面的字符0次或多次。

ba*rk 可以匹配 brk、bark、baark等等

+

匹配前面的字符1次或多次。

ba+rk 可以匹配bark、baark等等,但是不能匹配brk

?

匹配前面的字符0次或1次

ba?rk 只能匹配brk和bark

{n}

匹配一个字符恰好n次,其中n是一个整数

hob{2}it 可以匹配hobbit



 

(续表)  

元  字  符

意    思

例    子

{n,m}

匹配一个字符至少n次,最多m次,其中n和m都是整数

hob{2,3}it 只能匹配hobbit和hobbbit

.

匹配除null之外的任意单个字符

hob.it 可以匹配hobait、hobbit等等

(pattern)

匹配指定模式的一个子表达式。可以使用子表达式构成复杂的正则表达式。在这种子表达式中,可以访问单次的匹配,称为捕获(capture)

anatom(y|ies) 可以匹配anatomy和anatomies

x|y

匹配x或y,其中x和y是一个或多个字符

war|peace 可以匹配 war 或 peace

[abc]

匹配中括号内的任意一个字符

[ab]bc 可以匹配 abc 和 bbc

[a-z]

匹配指定范围内的任意一个字符

[a-c]bc 可以匹配 abc、bbc和cbc

[: :]

指定一个字符类,可以匹配该类中的任何字符

[:alphanum:] 可以匹配字符0-9、A-Z和a-z

[:alpha:] 可以匹配字符A-Z和a-z

[:blank:] 可以匹配空格或tab键

[:digit:] 可以匹配数字 0-9

[:graph:] 可以匹配非空字符

[:lower:] 可以匹配小写字母a-z

[:print:] 与 [:graph:] 类似,不同之处在于[:print:] 包括空格字符

[:punct:] 可以匹配标点符号.,'''等等

[:space:] 可以匹配所有的空白字符

[:upper:] 可以匹配所有的大写字母A~Z

[:xdigit:] 可以匹配十六进制数字0~9、A~F和a~f

[..]

匹配一个组合元素,例如多字符元素

[==]

指定等价类

\n

这是对前一次捕获的一个反向引用,其中n是一个正整数

(.)\1 可以匹配两个连续相同的字符。(.)可以匹配除null之外的任何单个字符,而 \1 则重复上次匹配的内容,即再次匹配相同的字符,因此可以匹配两个连续相同的字符

Oracle Database 10g Release 2新增加了很多类似于Perl的元字符,如表4-8所示。

表4-8  类似于Perl的元字符

元  字  符

含    义

\d

数字字符

\D

非数字字符

\w

字母字符

\W

非字母字符

\s

空白字符

\S

非空白字符



 

(续表)  

元  字  符

含    义

\A

只匹配字符串的开头位置

\Z

只匹配字符串的末尾位置或者字符串末尾的换行符之前的位置

*?

匹配前面的模式元素0次或多次

+?

匹配前面的模式元素1次或多次

??

匹配前面的模式元素0次或1次

{n}

匹配前面的模式元素恰好n次

{n,}

匹配前面的模式元素至少n次

{n,m}

匹配前面的模式元素至少n次,但不超过m次

表4-9列出了正则表达式函数。正则表达式函数是在Oracle Database 10g中新增加的, Oracle Database 11g中又增加了一些条目,如下表所示。

表4-9  正则表达式函数

函    数

说    明

REGEXP_LIKE( x, pattern

 [, match_option])

从x中搜索pattern参数中定义的正则表达式。可以使用match_option修改默认匹配选项,该参数可以被设置为:

•  'c',说明在匹配时区分大小写(默认选项)

•  'I',说明在匹配时不区分大小写

•  'n',允许使用可以匹配任意字符的操作符

•  'm',将x作为一个包含多行的字符串

REGEXP_INSTR( x, pattern

 [, start

 [, occurrence

 [, return_option

 [, match_option

[, subexp_option]]]])

在x中查找pattern,并返回pattern所在的位置。可以指定以下的可选参数:

•  start 开始查找的位置。默认值是1,指x的第一个字符。

•  occurrence 说明应该返回第几次出现pattern的位置。默认值是1,这意味着函数返回pattern第一次在x中出现的位置。

•  return_option 说明应该返回什么整数。若该参数为0,则说明要返回的整数是x中的第一个字符的位置;若该参数为非0的整数,则说明要返回的整数为x中出现在pattern之后的字符的位置

• match_option 修改默认的匹配设置,其工作方式与REGEXP_LIKEK()中指定的方式相同。

•  subexp_option是Oracle Database 11g新增加的,其工作方式如下:对于具有子表达式的模式,subexp_option是0~9之间的一个非负数,指出pattern中的哪个子表达式是函数的目标。例如,考虑表达式0123(((abc)(de)f)ghi)45(678),此表达式有5个子表达式,分别是:"abcdefghi"、"abcdef"、"abc"、"de"和"678"。
如果subexp_option是0,则返回pattern的位置。如果pattern没有正确的子表达式数字,则函数返回0。subexp_option为空值则返回空。subexp_option的默认值是0



 

(续表)  

函    数

说    明

REGEXP_REPLACE(x, pattern

 [, replace_string

 [, start

 [, occurrence

 [, match_option]]]])

在x中查找pattern,并将其替换为replace_string。其他选项的意思与 REGEXP_INSTR()函数的参数完全相同

REGEXP_SUBSTR( x, pattern

 [, start

 [, occurrence

 [, match_option

[, subexp_option]]]])

返回x中可以匹配pattern的一个子字符串,其开始位置由start指定。其他选项的意思与 REGEXP_INSTR()函数的参数完全相同。Oracle Database 11g新增加的subexp_option其工作方式与REGEXP_INSTR()函数中相同

REGEXP_COUNT( x, pattern

 [, start

 [, match_option]])

 

这是Oracle Database 11g新增加的一个函数。在x中查找pattern,并返回pattern在x中出现的次数。可以提供以下两个可选参数:

•  start 开始查找的位置。默认值是1,指x的第一个字符。

•  match_option 修改默认的匹配设置,其工作方式与REGEXP_LIKEK()中相同

接下来的几节将会介绍更多有关正则表达式函数的知识。

1. REGEXP_LIKE()

REGEXP_LIKE(x, pattern [, match_option])用于在x中查找pattern参数中定义的正则表达式,该函数还可以提供一个可选参数match_option,它可以设置为下面几个字符之一:

● 'c',说明在匹配时区分大小写(默认选项)

● 'I',说明在匹配时不区分大小写

● 'n',允许使用可以匹配任意字符的操作符

● 'm',将x 作为一个包含多行的字符串

下面这个查询使用REGEXP_LIKE函数检索生日在1965年到1968年之间的顾客:

 SELECT customer_id, first_name, last_name, dob
FROM customers
WHERE REGEXP_LIKE(TO_CHAR(dob, 'YYYY'), '^196[5-8]$');


CUSTOMER_ID FIRST_NAME LAST_NAME   DOB

----------- ---------- ---------- ---------

  1 John         Brown       01-JAN-65

  2 Cynthia      Green       05-FEB-68

下面这个查询检索名字以J或j开头的顾客。注意传递给REGEXP_LIKE()的正则表达式是 ^j,匹配选项是i,这说明不区分大小写,因此在本例中,^j 可以匹配J或j:

 SELECT customer_id, first_name, last_name, dob
FROM customers
WHERE REGEXP_LIKE(first_name, '^j', 'i');


CUSTOMER_ID FIRST_NAME LAST_NAME   DOB

----------- ---------- ---------- ---------

  1 John         Brown       01-JAN-65

2. REGEXP_INSTR()

REGEXP_INSTR(x, pattern [, start [, occurrence [, return_option [, match_option]]]])用于在x中查找pattern;REGEXP_INSTR()返回pattern出现的位置。匹配位置从1开始。

下面这个查询使用REGEXP_INSTR函数返回匹配正则表达式 l[[:alpha:]]{4}的位置:

 SELECT
REGEXP_INSTR('But, soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}') AS result
FROM dual;
RESULT
----------
17

注意返回值为17,这是light中l的位置。

下面这个查询返回第二次匹配正则表达式 s[[:alpha:]]{3}的位置,匹配位置从1开始:

 SELECT
REGEXP_INSTR('But, soft! What light through yonder window softly breaks?',
's[[:alpha:]]{3}', 1, 2) AS result
FROM dual;


RESULT

----------

45

下面这个查询使用REGEXP_INSTR函数返回第二次匹配字母 o 的位置,匹配位置从10开始:

 SELECT
REGEXP_INSTR('But, soft! What light through yonder window breaks?',
'o', 10, 2) AS result
FROM dual;
RESULT
----------
32

3. REGEXP_REPLACE()

REGEXP_REPLACE(x, pattern [, replace_string [, start [, occurrence[, match_option]]]])用于在x中查找pattern,并将其替换为 replace_string。

下面这个查询使用REGEXP_REPLACE函数将匹配正则表达式 l[[:alpha:]]{4}的子字符串替换为字符串 sound:

 SELECT
REGEXP_REPLACE('But, soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}', 'sound') AS result
FROM dual;
RESULT
---------------------------------------------------
But, soft! What sound through yonder window breaks?

注意light已经被替换为sound。

4. REGEXP_SUBSTR()

REGEXP_SUBSTR(x, pattern[, start [, occurrence[, match_option]]])用于在x中查找匹配pattern的子字符串,开始位置由 start指定。

下面这个查询使用REGEXP_SUBSTR函数返回匹配正则表达式 l[[:alpha:]]{4}的子字符串:

 SELECT
REGEXP_SUBSTR('But, soft! What light through yonder window breaks?',
'l[[:alpha:]]{4}') AS result
FROM dual;
RESUL
-----
light

5. REGEXP_COUNT()

REGEXP_COUNT()是Oracle Database 11g新增加的一个函数。REGEXP_COUNT(x, pattern[, start [,match_option]])用于在x中查找pattern,并返回pattern在x中出现的次数。可以提供可选参数start,指出要从x中开始查找pattern的那个字符;也可以提供可选的match_option字符串,指出匹配选项。

下面这个查询使用REGEXP_COUNT函数返回正则表达式s[[:alpha:]]{3}出现的次数:

 SELECT
REGEXP_COUNT('But, soft! What light through yonder window softly breaks?',
's[[:alpha:]]{3}') AS result
FROM dual;
    RESULT
----------
2

注意返回结果是2,这表明正则表达式在提供的字符串中有两次匹配。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: oracle中如何使用正则函数

本文链接: https://lsjlt.com/news/57197.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • oracle中如何使用正则函数
    oracle中如何使用正则函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。使用这些函数可以在字符串中搜索字符模式。例如,假设...
    99+
    2024-04-02
  • PHP中如何使用正则函数
    PHP中如何使用正则函数,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP正则表达式的定义: 用于描述字符排列和匹配模式的一种语法规则。它主要用于字符串的模式...
    99+
    2023-06-17
  • T-SQL中如何使用正则表达式函数
    今天就跟大家聊聊有关T-SQL中如何使用正则表达式函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。首先,我们在VSTS中创建一Database P...
    99+
    2024-04-02
  • 如何在PHP中使用正则表达式函数
    在PHP中,正则表达式是一种非常强大的工具,可用于匹配文本中的模式。PHP提供了许多内置函数来操作正则表达式,使其更加方便快捷。在本文中,我们将学习如何在PHP中使用正则表达式函数,包括以下主题:正则表达式语法preg_match函数pre...
    99+
    2023-05-18
    函数 PHP 正则表达式
  • 如何使用C++中的正则表达式函数?
    如何使用C++中的正则表达式函数?正则表达式是一种强大的文本处理工具,可以用于匹配、搜索和替换文本中的模式。在C++中,我们可以使用正则表达式函数库来实现对文本的处理。本文将介绍如何在C++中使用正则表达式函数。首先,我们需要包含C++标准...
    99+
    2023-11-18
    C++正则表达式 使用C++正则 C++正则函数
  • javascript中如何使用正则
    这篇文章给大家分享的是有关javascript中如何使用正则的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 javascript中的正则方法:1、ex...
    99+
    2024-04-02
  • Python正则函数怎么使用
    这篇文章主要介绍“Python正则函数怎么使用”,在日常操作中,相信很多人在Python正则函数怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python正则函数怎么使用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-21
  • 如何使用python正则表达式模块中的re.findall()函数
    本篇内容主要讲解“如何使用python正则表达式模块中的re.findall()函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用python正则表达式模块中的re.findall()函...
    99+
    2023-06-16
  • VBS中如何使用正则判别素数
    这篇文章主要为大家展示了“VBS中如何使用正则判别素数”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“VBS中如何使用正则判别素数”这篇文章吧。复制代码 代码如下:Set regex = New ...
    99+
    2023-06-08
  • 如何正确的使用oracle管道函数
    如何正确的使用oracle管道函数?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。oracle管道函数是一类特殊的函数,oracle管道函数返回...
    99+
    2024-04-02
  • 如何使用php正则
    本篇内容介绍了“如何使用php正则”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php正则的用法:1、创建一个PHP示例文件;2、定义一个数...
    99+
    2023-06-25
  • 在Oracle中使用正则表达式
    目录一、正则表达式:1、REGEXP_LIKE :匹配2、REGEXP_REPLACE :替换3、REGEXP_INSTR :位置4、REGEXP_SUBSTR :提取5、R...
    99+
    2024-04-02
  • 如何使用PHP中的preg_replace()函数进行正则表达式替换
    如何使用PHP中的preg_replace()函数进行正则表达式替换正则表达式是一种强大的模式匹配工具,在PHP中,使用preg_replace()函数可以实现对字符串进行正则表达式替换。本文将介绍如何使用preg_replace()函数进...
    99+
    2023-11-18
    PHP preg_replace() 正则表达式替换
  • Oracle中decode函数如何使用
    这篇文章将为大家详细讲解有关Oracle中decode函数如何使用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。函数介绍:DECODE函数是ORACLE P...
    99+
    2024-04-02
  • oracle中如何使用decode函数
    今天就跟大家聊聊有关oracle中如何使用decode函数,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。  一、DECODE函数是ORACLE PL...
    99+
    2024-04-02
  • Oracle中nvl( )函数如何使用
    Oracle中nvl( )函数如何使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、介绍: nvl( ) 函数从两个表达式返...
    99+
    2024-04-02
  • oracle中如何使用CAST函数
    本篇文章为大家展示了oracle中如何使用CAST函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。CAST()函数可以进行数据类型的转换。CAST()函数的参数有...
    99+
    2024-04-02
  • oracle中to_char函数如何使用
    在Oracle中,TO_CHAR函数用于将一个数值、日期或时间转换为字符串。它具有以下语法:TO_CHAR(expr, fo...
    99+
    2023-08-30
    oracle
  • oracle中replace函数如何使用
    在Oracle中,`REPLACE`函数的语法如下:```sqlREPLACE(string, search_string,...
    99+
    2023-10-07
    oracle
  • oracle10g数据库中如何使用正则表达式
    本篇文章为大家展示了oracle10g数据库中如何使用正则表达式,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如果有一个字符串  aabcd ,并指定了一...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作