繁体   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