2017-09-01 101 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表達式中包含對前導空格和尾隨空格的測試? –