簡體   English   中英

oracle正則表達式問題

[英]oracle regular expression issue

我一直在嘗試查找不可打印的記錄(即在 ASCII 32 到 127 之間),下面我提到根據查詢它應該打印所有 chr 小於 32 或大於 127 的記錄,但它沒有顯示帶有 chr(160) 的記錄,而它確實顯示帶有 chr(10) 的記錄

select regexp_instr(a.COL, '[^[:print:]]$') as STRING_POSITION,
       a.COL, dump(col)
from tq84_compare a
where regexp_instr(a.COL, '[^[:print:]]') > 0;

insert into tq84_compare
    values (11, chr(10));

insert into tq84_compare
    values (11, chr(160));

插入 tq84_compare 值 (101,'On-line'||chr(160)||chr(160)||chr(160));

您不能將 Unicode 硬空間與[:space:][^[:print:]]\\s模式匹配。

您可以使用以下解決方案修剪字符串:

select regexp_replace(' some stuff  ', '^[[:space:] ]+|[[:space:] ]+$', '') as result from dual

里面的空間是硬空間。 ^[[:space:] ]+將匹配字符串開頭的所有 ASCII 空格和/或硬空格,而[[:space:] ]+$將匹配所有 ASCII 空格字符和末尾的硬空格字符串。

如果要向[^[:print:]]添加硬空間,則需要使用替代方法:

select regexp_replace(' some stuff  ', '^([^[:print:]]| )+|([^[:print:]]| )+$', '') as result from dual

請參閱此在線演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM