Oracle-11g-R2

‘之間的主要區別是什麼[:空間:____[:sp一種C和:[:space:Oracle pl-sql 正則表達式中的 ]’ 和 ’s’?

  • July 8, 2020

我有一個這樣的字元串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;

我想知道 :

  1. 有沒有更好的方法來做到這一點?
  2. 這兩個查詢之間的主要區別是什麼?我的意思是[[: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.

引用自:https://dba.stackexchange.com/questions/270531