SQL中两个字符分隔符上的正则表达式子字符串

雷哈特攻击

我试图采用一个定界的字符串并返回定界符之间的每个子字符串。这在我正在编写的更大的函数中使用,因此分隔符通常是变量。

我们使用的一个非常常见的定界符是',',因此这是我的第一个测试用例。我有不同的问题,具体取决于我如何在正则表达式中格式化定界符。

以下是我尝试过的不同操作和结果:

select REGEXP_SUBSTR ('foo bar', '[^' || '(, )' || ']+', 1, LEVEL) item
        from dual
        connect by REGEXP_SUBSTR ('foo bar', '[^' || '(, )' || ']+', 1, LEVEL

select REGEXP_SUBSTR ('foo bar', '[^' || '(,\s)' || ']+', 1, LEVEL) item
        from dual
        connect by REGEXP_SUBSTR ('foo bar', '[^' || '(,\s)' || ']+', 1, LEVEL

select REGEXP_SUBSTR ('foo bar', '[^' || '(,[:blank:])' || ']+', 1, LEVEL) item
        from dual
        connect by REGEXP_SUBSTR ('foo bar', '[^' || '(,[:blank:])' || ']+', 1, LEVEL

即使没有逗号,第一次和第三次尝试也会在空格上分隔“ foo”和“ bar”。后一种尝试按希望的方式将'foo'和'bar'保持在同一行,但是如果字符串中包含s(例如horse),则结果为'hor''e'。

我对正则表达式和regexp_substr的理解告诉我

'[^(,\s)]+'

遇到逗号时,应将字符串分隔开,然后使用空格。但是显然这没有发生。我尚未找到与我有类似问题的任何人。任何帮助将非常感激

供参考,我在SQL Developer中使用Oracle Database 11g企业版11.2.0.4.0版-64位生产

亚历克斯·普尔

您对匹配字符列表的工作方式感到困惑。从文档中

[字符...]匹配字符列表

匹配括号内列表中的任何单个字符。在列表中,除这些以外的所有>运算符均视为文字:

范围运算符:
-POSIX字符类:[::]
POSIX归类元素:[。。]
POSIX字符等效类:[= =]

因此,在您的模式中'[^(,\s)]+',这些字符中的每个字符都被视为文字。\不使s被视为空白字符,它只是一个s,因此被匹配horse而且括号也是文字,因此它们没有将定界符中的字符对括起来,每个字符只匹配字符串中的实际括号。在您的第一次和第三次尝试中,由于匹配列表中的每个字符都是独立的,因此您仅在一个空格上进行了匹配,因此括号中的每个字符都不像您期望的那样组合在一起。

据我所知,您不能否定一对值(尽管正则表达式不是强项,所以我很可能对此大错特错)。一种选择是将分隔符的所有外观替换为您不知道的字符-根据您的实际数据,您可能不得不选择一个无法打印的字符或一个晦涩的Unicode字符-然后在正则表达式中使用该字符。

例如,为了简洁起见,使用绑定变量和哈希作为我知道的字符不存在:

variable string varchar2(20);
variable delimiter varchar2(2);

exec :string := 'foo bar, the cad, left';
exec :delimiter := ', ';

select regexp_substr(replace(:string, :delimiter, '#'),
  '[^#]+', 1, level) as item
from dual
connect by regexp_substr(replace(:string, :delimiter, '#'),
  '[^#]+', 1, level) is not null;

ITEM                
--------------------
foo bar              
the cad              
left                 

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式:提取两个字符串之间的字符串。没有明显的分隔符

来自分类Dev

正则表达式忽略两个字符串之间的字符?

来自分类Dev

正则表达式匹配两个字符之间的字符串

来自分类Dev

正则表达式查找两个字符之间的字符串

来自分类Dev

正则表达式在两个字符串中获取字符串

来自分类Dev

正则表达式匹配逗号分隔、多行和两个字符串之间的单词

来自分类Dev

两个字符串之间的python正则表达式匹配

来自分类Dev

使用perl正则表达式比较两个字符串

来自分类Dev

两个字符串数组之间的正则表达式匹配

来自分类Dev

正则表达式在两个字符串之间获取文本

来自分类Dev

Javascript正则表达式比较两个字符串

来自分类Dev

两个字符串python之间的正则表达式文本

来自分类Dev

正则表达式两个字符串变量

来自分类Dev

加入两个字符串并摆脱列表正则表达式

来自分类Dev

正则表达式满足两个字符串条件

来自分类Dev

两个字符串之间的正则表达式文本

来自分类Dev

正则表达式:计算两个字符串之间的差异

来自分类Dev

多行正则表达式在两个字符串之间读取

来自分类Dev

正则表达式模式匹配并获得两个字符串

来自分类Dev

正则表达式在两个字符串的中间找到刺痛

来自分类Dev

正则表达式匹配文档中两个字符串之间的所有字符

来自分类Dev

使用正则表达式查找Javascript中两个字符串之间的差异

来自分类Dev

正则表达式匹配两个字符串,包括那些字符串

来自分类Dev

两个字符串之间或字符串末尾的R正则表达式

来自分类Dev

使用正则表达式获取两个字符串之间的子字符串

来自分类Dev

Bash正则表达式,两个字符串之间的匹配字符串

来自分类Dev

正则表达式-匹配两个字符串之间的字符串

来自分类Dev

正则表达式,以匹配其他两个字符串之间的字符串

来自分类Dev

使用正则表达式提取两个字符串之间的字符串

Related 相关文章

  1. 1

    正则表达式:提取两个字符串之间的字符串。没有明显的分隔符

  2. 2

    正则表达式忽略两个字符串之间的字符?

  3. 3

    正则表达式匹配两个字符之间的字符串

  4. 4

    正则表达式查找两个字符之间的字符串

  5. 5

    正则表达式在两个字符串中获取字符串

  6. 6

    正则表达式匹配逗号分隔、多行和两个字符串之间的单词

  7. 7

    两个字符串之间的python正则表达式匹配

  8. 8

    使用perl正则表达式比较两个字符串

  9. 9

    两个字符串数组之间的正则表达式匹配

  10. 10

    正则表达式在两个字符串之间获取文本

  11. 11

    Javascript正则表达式比较两个字符串

  12. 12

    两个字符串python之间的正则表达式文本

  13. 13

    正则表达式两个字符串变量

  14. 14

    加入两个字符串并摆脱列表正则表达式

  15. 15

    正则表达式满足两个字符串条件

  16. 16

    两个字符串之间的正则表达式文本

  17. 17

    正则表达式:计算两个字符串之间的差异

  18. 18

    多行正则表达式在两个字符串之间读取

  19. 19

    正则表达式模式匹配并获得两个字符串

  20. 20

    正则表达式在两个字符串的中间找到刺痛

  21. 21

    正则表达式匹配文档中两个字符串之间的所有字符

  22. 22

    使用正则表达式查找Javascript中两个字符串之间的差异

  23. 23

    正则表达式匹配两个字符串,包括那些字符串

  24. 24

    两个字符串之间或字符串末尾的R正则表达式

  25. 25

    使用正则表达式获取两个字符串之间的子字符串

  26. 26

    Bash正则表达式,两个字符串之间的匹配字符串

  27. 27

    正则表达式-匹配两个字符串之间的字符串

  28. 28

    正则表达式,以匹配其他两个字符串之间的字符串

  29. 29

    使用正则表达式提取两个字符串之间的字符串

热门标签

归档