Oracle regexp匹配包含换行符的字符串中的模式

时间:2013-10-18 19:51:28

标签: regex oracle

我正在尝试根据匹配表达式拆分字符串。请注意,这包括换行符。

以下是我的查询

with base aS(
      select 
      'sam s123 565 q2#
      nicole s1257 546 q4#
      mary s568 545' str1
      from dual
)
select regexp_substr(str1, '[^q[:digit:]]#+', 1, level, 'm') as split
  from base
  connect by level <= regexp_count(str1, '[^q[:digit:]]#+')

我想看到返回的行为:

sam s123 565
nicole s1257 546 
mary s568 

谢谢

1 个答案:

答案 0 :(得分:0)

将正则表达式更改为此。

(.?+) -- any one or more characters. Put this in brackets as first subexpression
q     -- letter q
\d+   -- one or more digits
#     -- character #

并在REGEXP_SUBSTR函数中再包含一个paraemter,以仅提取第一个子表达式。使用TRIM删除空格。

WITH base AS (SELECT 'sam s123 565 q2#
      nicole s1257 546 q4#
      mary s568 545' str1 FROM DUAL)
    SELECT TRIM (REGEXP_SUBSTR (str1,
                                '(.?+)q\d+#',
                                1,
                                LEVEL,
                                'm',
                                1       --first subexpression
                               )
                )
              AS split
      FROM base
CONNECT BY LEVEL <= REGEXP_COUNT (str1, '(.?+)q\d+#');

输出:

split
-------------
sam s123 565
nicole s1257 546

由于您的第三行没有匹配的模式,因此不会返回该模式。