2017-09-01 525 views
1

我试图标识注释中有多个空格的字段,例如'this lhas three spaces'Oracle使用REGEXP_LIKE标识多个空格

使用这个我可以用两个空格得到任何东西,而是想能够得到2个或更多:

select * from labtec.spaces 
where REGEXP_LIKE(SPACES, '[[:space:]]{2}'); 

有什么建议?

回答

1
where REGEXP_LIKE(SPACES, '[[:space:]][[:space:]]+'); 
1

我相信,你可以:

select * from labtec.spaces 
where REGEXP_LIKE(SPACES, '[[:space:]]{2,}'); 

注意逗号。

“三到五年之间”你会用{3,5},为“两个或更多” {2,},对“八少” {,8}

+0

良好,即工作一种享受。还有一件事,我是否也可以在使用'(^ | $)'时包含尾部和前导空格' –

+0

当然,我认为你会''(^ | $ | [[:space:]] {2,})''。你想清楚你是否想在整个我猜中使用'[[:space:]]或''。 –

1

你并不需要检查两个或更多的字符 - 检查因为如果有三个字符,那么只匹配其中的两个就可以工作,就像匹配两个或更多个字符一样。

这将找到它具有两个或多个(连续或不连续的)空间CHR(32)字符(不使用正则表达式)字符串:

SELECT * 
FROM labtec.spaces 
WHERE INSTR(spaces, ' ', 1, 2) > 0 

这会发现那里有两个或多个连续的空间CHR(32)字符:

SELECT * 
FROM labtec.spaces 
WHERE INSTR(spaces, ' ') > 0 

如果你想要的任何两个(或更多)连续的空格字符,那么你只需要检查两个匹配字符:

SELECT * 
FROM labtec.spaces 
WHERE REGEXP_LIKE(spaces, '\s\s') -- Or, using POSIX syntax '[[:space:]]{2}' 

更新 - 首尾空格

SELECT * 
FROM labtec.spaces 
WHERE SUBSTR(spaces, 1, 2) = ' ' -- at least two leading spaces 
OR  SUBSTR(spaces, -2) = ' ' -- at least two trailing spaces 

,或者使用(类似Perl)的正则表达式:

SELECT * 
FROM labtec.spaces 
WHERE REGEXP_LIKE(spaces, '^\s\s|\s\s$') 
+0

谢谢。我是否也可以在同一个REGEXP_LIKE表达式中包含对前导空格和尾随空格的测试? –