正则表达式匹配零和空格

时间:2018-09-18 08:16:13

标签: sql regex oracle

我正在寻找一个捕获所有0值和空格的正则表达式。找到类似的任何组合:

  1. 0000 0 0 0 000 000
  2. 0 0 0 00000 00000
  3. 00000000

我尝试使用

[0\s]+$

,但无法正常工作。我应该如何重写我的正则表达式? (我正在尝试找出方法,但是..()

3 个答案:

答案 0 :(得分:0)

如果您只想使用零和空格,则应使用它,

[0 ]+

\ s捕获所有空白,包括空格,制表符,换行和回车符。所以只需将0和空格放在方括号内

答案 1 :(得分:0)

我认为您正在寻找this

with t(id,value) as
(
 select 1,'0000 0 0 0 000 000' from dual union all
 select 2,'0 0 0 00000 00000' from dual union all
 select 3,'00000000'          from dual union all
 select 4,'0a0 0 00000 00000' from dual  
)
 select t.value as "values", 
        regexp_substr(t.value,'[[:space:]]+') as "spaces",
        regexp_substr(t.value,'[0]+') as "zeroes"        
   from t 
  order by id;

答案 2 :(得分:-1)

在正则表达式中,您尝试使用方括号\s中的字符类[]。这是行不通的(至少不是按预期的那样)-您的正则表达式尝试匹配文字零,反斜杠或字母s。

最简单的解决方法是消除方括号,并在|中使用or表达式:

with v(value) as (
  select '0000 00 00 ' from dual union all
  select '0' || chr(9) || '00000000' from dual union all
  select '000000000' || chr(10) from dual)
select value, 
  regexp_substr(value, '(0|\s)+') as mynum
from v

或者,您可以在方括号内使用POSIX字符类[:space:]

with v(value) as (
  select '0000 00 00 ' from dual union all
  select '0' || chr(9) || '00000000' from dual union all
  select '000000000' || chr(10) from dual)
select value, 
  regexp_substr(value, '[0[:space:]]+') as mynum2
from v
相关问题