Oracle-11g-R2
‘之間的主要區別是什麼[:空間:____[:sp一種C和:[:space:Oracle pl-sql 正則表達式中的 ]’ 和 ’s’?
我有一個這樣的字元串
x=y AND z=y AND p=q
,我需要替換每個(space)AND(space)
模式,*
以便原始字元串變成x=y*z=y*p=q
. 我正在使用Regular expression
這個原因,重要的是每個AND
.我為此寫了兩個不同的查詢
query1: select regexp_replace('x=y AND z=y AND p=q','[[:space:]]AND[[:space:]]','*') from dual; query2: select regexp_replace('x=y AND z=y AND p=q', '\s+AND\s+', '*') from dual;
我想知道 :
- 有沒有更好的方法來做到這一點?
- 這兩個查詢之間的主要區別是什麼?我的意思是
[[:space:]] and \s
?重要的是我想知道這兩個查詢在什麼樣的條件下會產生不同的結果?提前致謝
Oracle 文件確認 POSIX 表達式
[[:space:]]
等同於 Perl樣式\s
。我個人更喜歡\s
它,因為它更短,並且也受到許多文本編輯器的支持。在您的範例中,您有
[[:space:]]
(一個空白字元)但是\s+
(一個或多個空白字元)。也許應該是這樣[[:space:]]+
。
每當您想要非常通用的東西時,就會使用這些錨點,正如它們在正則表達式處理器中所說的那樣,它們關心“任何空格字元”,但是 POSIX 中的定義更加詳細,並表示“空格、製表符、換行符”。這取決於您對其編寫方式的表達,因為從技術上講,使用這兩種替代方案不應引入任何錯誤或行為差異。
\\s → any space character \\S → anything but a space character -- [[:space:]] → space, tab, newline etc.