[英]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.