Oracle

Oracle PL-SQL“正則表達式”將字元串中的每個“(空格)和(空格)”替換為“,”

  • July 4, 2020

我有一個這樣的字元串x=y and g=h and u=1,我需要(space)and(space),. 我regular_expression為此使用了強大的功能,但它並沒有給我想要的結果。

select regexp_replace('x=y and g=h and u=1','(^[[:space:]]*)AND(^[[:space:]]*)', ',')
from dual;

我想知道你是否可以在這裡幫助我。提前致謝。

如果格式始終恰好是小寫字母兩側的一個空格and,那麼您不需要regexp_replace像普通的舊格式replace那樣:

with demo (str) as
     ( select 'x=y and g=h and u=1' from dual )
select str
    , replace(str, ' and ', ',') as plain_replace
from   demo;

STR                 PLAIN_REPLACE
------------------- -------------------
x=y and g=h and u=1 x=y,g=h,u=1

如果空格數可以變化,則需要正則表達式:

with demo (str) as
     ( select 'x=y  and g=h and   u=1' from dual )
select str
    , replace(str, ' and ', ',') as plain_replace
    , regexp_replace(str, '\s+and\s+', ',') as one_or_more_spaces
from   demo;
STR                     PLAIN_REPLACE          ONE_OR_MORE_SPACES
----------------------- ---------------------- ---------------------------
x=y  and g=h and   u=1  x=y ,g=h,  u=1         x=y,g=h,u=1

+表示一個或多個,與之相反,*它表示零或多個。例如,我假設您不想Band in Spandex替換為B,in Sp,ex.

為了安全起見,我使用了Perl 風格的 \s(空白)運算符而不是文字空格字元,因為這也將匹配任何製表符。

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