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