正则表达式查找空白字符和非空白字符

时间:2017-06-25 01:43:34

标签: sql regex oracle regexp-substr

帮我修复我的正则表达式::

(REGEXP_SUBSTR(WORD, '#time\S[0-9]{1,2}'  )) as reg

我想得到结果:

'#time 52' 
'#time20'

如果我写:(REGEXP_SUBSTR(WORD, '#time\S[0-9]{1,2}' ))作为reg

结果:#time20

如果我写:(REGEXP_SUBSTR(WORD, '#time\s[0-9]{1,2}' ))作为reg

结果:#time 52

SQL查询:

SELECT
(REGEXP_SUBSTR(WORD, '#time\S[0-9]{1,2}'  )) as reg
FROM(
select
'text #time 52 texttexttext  #time20 text'  as WORD
from dual
)tabl

我该如何解决?谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

如果我理解正确,这就是你想要的表达方式:

select REGEXP_SUBSTR(WORD, '#time\s*[0-9]{1,2}')

这将处理“#time”和数字之间的任意数量的空格(包括0)。如果您最多需要一个,请使用?代替*

答案 1 :(得分:0)

您是否在寻找确切的子串#text,然后是可选空格,然后是一位或两位数?然后'#text\s?\d{1,2}'将起作用。 ?表示可选。

在这种情况下,您的'#text\S\d{1,2}'不正确;它允许并要求 #text和一个或两个数字之间的非空格字符。在您的示例中,恰好匹配第一个数字,然后\d{1,2}匹配第二个数字,但这只是巧合。它还会匹配#text+00#text123。但它会匹配#text4(如果没有后跟一两个数字)。