REGEXP_SUBSTR中\ s和[:space:]之间的差异

时间:2016-01-30 20:49:49

标签: regex oracle

我尝试使用REGEXP_SUBSTR从字符串中提取非空格字符。

我使用此正则表达式\s*([^\s]*)\s*并提取第一组

使用\s表示文本中的空格 here删除了前导空格,但保留了一次训练。

 select  '"'||REGEXP_SUBSTR( ' xxx  ', '\s*([^\s]*)\s*', 1, 1, NULL, 1 )||'"' AS text
 from dual;

 "xxx  "

只有当我按照10g的文档切换到POSIX语法时,才会得到预期的结果。

 select  '"'||REGEXP_SUBSTR( ' xxx  ', '\s*([^[:space:]]*)[:space:]*', 1, 1, NULL, 1 )||'"' AS text
 from dual;

 "xxx"

我做错了什么?

我在12.1.0.2.0

NLS_CHARACTERSET WE8MSWIN1252

1 个答案:

答案 0 :(得分:1)

[^\s]不正确,您无法在[]内使用反斜表组。

documentation明确指出

  

在列表中,除这些之外的所有运算符都被视为文字

     

范围运算符: -

     

POSIX字符类:[::]

     

POSIX校对元素:[。 ]

     

POSIX字符等值类:[= =]

所以\意味着[]

中的自我