为什么Oracle SQL函数regexp_substr不返回所有匹配的字符?

索林·波斯特尔尼库(Sorin Postelnicu)

任何人(在正则表达式匹配方面具有丰富经验的人)都可以为我澄清为什么以下查询在Oracle 12中返回(我认为)意外结果吗?

select regexp_substr('My email: [email protected]', '[^@:space:]+@[^@:space:]+') 
from dual;

预期结果:[email protected]

实际结果:t @ t

另一个例子:

select regexp_substr('Beneficiary email: [email protected]', '[^@:space:]+@[^@:space:]+') 
from dual;

预期结果:[email protected]

实际结果:ry1 @ gm

编辑:我仔细检查过,这与Oracle SQL不相关,但是相同的行为适用于任何正则表达式引擎。即使将正则表达式简化为[^:space:] + @ [^:space:] +,结果也相同。我很好奇知道为什么它与@符号前后的所有非空白字符都不匹配。为何有时它匹配1个字符,而有时却匹配2个或3个或更多字符,但不是全部。

加里·W

您尝试使用的POSIX快捷方式不正确,您需要在方括号中加上以下方括号:

SELECT REGEXP_SUBSTR('Beneficiary email: [email protected]', '[^@[:space:]]+@[^@[:space:]]+') 
FROM dual;

甚至更简单,假设您只想通过检查'@'进行验证,并且电子邮件地址始终在字符串的末尾,最后一个空格之后:

WITH tbl(str) AS (
  SELECT 'My email: [email protected]' FROM dual UNION ALL
  SELECT 'Beneficiary email: [email protected]' FROM dual
)
SELECT REGEXP_REPLACE(str, '.* (.*@.*)', '\1')
from tbl
;

注意:REGEXP_REPLACE()如果找不到匹配项,REGEXP_SUBSTR()将返回原始字符串,其中将返回NULL。请记住这一点,并处理找不到相应的匹配项。永远期待意外!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle SQL:从两个字符串之间的 blob 返回字符串(可能使用 REGEXP_SUBSTR)

来自分类Dev

ORACLE REGEXP_SUBSTR与方括号之间的数字匹配

来自分类Dev

Oracle 11G REGEXP_SUBSTR函数

来自分类Dev

Regexp_substr 在某些字符集后提取 Oracle

来自分类Dev

为什么在Oracle中SQL连接失败?

来自分类Dev

oracle中的REGEXP_SUBSTR

来自分类Dev

Oracle SQL regexp_substr数字提取行为

来自分类Dev

为什么选择单个属性返回的行少于选择Oracle SQL中的所有列的行

来自分类Dev

使用 REGEXP_SUBSTR 或 SUBSTR 函数在 Oracle SQL 中“第一个 _(下划线)后开始”和“第二个 _(下划线)结束”中查找子字符串

来自分类Dev

Oracle SQL正则表达式RegExp_SubStr行尾(搜索文本中的chr(10)返回null

来自分类Dev

尽管有匹配项,为什么该函数什么也不返回?

来自分类Dev

PIVOT的Oracle REGEXP_SUBSTR列名称

来自分类Dev

oracle中REGEXP_SUBSTR中的混乱

来自分类Dev

关于 Regexp_substr 的 Oracle 查询

来自分类Dev

为什么NOT IN不总是与Oracle中的MINUS检索相同的结果?

来自分类Dev

为什么Oracle的Java教程代码返回错误?

来自分类Dev

为什么Oracle中的嵌套聚合函数需要GROUP BY

来自分类Dev

为什么Oracle中的嵌套聚合函数需要GROUP BY

来自分类Dev

为什么oracle XML表视图不返回任何结果或结果有限?

来自分类Dev

为什么oracle XML表视图不返回任何结果或结果有限?

来自分类Dev

为什么Oracle SQL Developer使用这种奇怪的删除条件?

来自分类Dev

为什么在PL / SQl ORACLE中使用游标?

来自分类Dev

为什么 Tableau 不接受我的初始 SQL (Oracle)?

来自分类Dev

elasticsearch聚合-为什么匹配所有查询不返回更特定查询的键?

来自分类Dev

为什么oracle用户定义函数在Oracle Sql Developer 4.0.3.16中显示错误

来自分类Dev

在 Oracle 中使用 REGEXP_SUBSTR 从字符串中提取 ID 号

来自分类Dev

为什么XMPP函数什么也不返回?

来自分类Dev

为什么我的parse函数不返回所有预期的令牌?

来自分类Dev

在sql oracle中使用regexp_substr在特定单词之后获取单词

Related 相关文章

  1. 1

    Oracle SQL:从两个字符串之间的 blob 返回字符串(可能使用 REGEXP_SUBSTR)

  2. 2

    ORACLE REGEXP_SUBSTR与方括号之间的数字匹配

  3. 3

    Oracle 11G REGEXP_SUBSTR函数

  4. 4

    Regexp_substr 在某些字符集后提取 Oracle

  5. 5

    为什么在Oracle中SQL连接失败?

  6. 6

    oracle中的REGEXP_SUBSTR

  7. 7

    Oracle SQL regexp_substr数字提取行为

  8. 8

    为什么选择单个属性返回的行少于选择Oracle SQL中的所有列的行

  9. 9

    使用 REGEXP_SUBSTR 或 SUBSTR 函数在 Oracle SQL 中“第一个 _(下划线)后开始”和“第二个 _(下划线)结束”中查找子字符串

  10. 10

    Oracle SQL正则表达式RegExp_SubStr行尾(搜索文本中的chr(10)返回null

  11. 11

    尽管有匹配项,为什么该函数什么也不返回?

  12. 12

    PIVOT的Oracle REGEXP_SUBSTR列名称

  13. 13

    oracle中REGEXP_SUBSTR中的混乱

  14. 14

    关于 Regexp_substr 的 Oracle 查询

  15. 15

    为什么NOT IN不总是与Oracle中的MINUS检索相同的结果?

  16. 16

    为什么Oracle的Java教程代码返回错误?

  17. 17

    为什么Oracle中的嵌套聚合函数需要GROUP BY

  18. 18

    为什么Oracle中的嵌套聚合函数需要GROUP BY

  19. 19

    为什么oracle XML表视图不返回任何结果或结果有限?

  20. 20

    为什么oracle XML表视图不返回任何结果或结果有限?

  21. 21

    为什么Oracle SQL Developer使用这种奇怪的删除条件?

  22. 22

    为什么在PL / SQl ORACLE中使用游标?

  23. 23

    为什么 Tableau 不接受我的初始 SQL (Oracle)?

  24. 24

    elasticsearch聚合-为什么匹配所有查询不返回更特定查询的键?

  25. 25

    为什么oracle用户定义函数在Oracle Sql Developer 4.0.3.16中显示错误

  26. 26

    在 Oracle 中使用 REGEXP_SUBSTR 从字符串中提取 ID 号

  27. 27

    为什么XMPP函数什么也不返回?

  28. 28

    为什么我的parse函数不返回所有预期的令牌?

  29. 29

    在sql oracle中使用regexp_substr在特定单词之后获取单词

热门标签

归档