与 ASCII 和扩展 Unicode 字符匹配的正则表达式

问题描述 投票:0回答:1

我在 Oracle DB 的 CLOB 数据类型列下使用以下正则表达式:

SELECT
CASE
    WHEN COUNT(*) > 0 THEN 1
    ELSE 0
END AS contains_extended_unicode 
FROM my_table 
WHERE REGEXP_LIKE(TO_CHAR(my_column), '[^[:print:]\r\n\t]');

当数据纯粹是键盘上可打印的 ASCII 字符时,查询应返回 0。如果任何字符超出,即 •,MS Word 中的项目符号列表将被视为扩展 Unicode 字符,查询返回为 1。

目前,如果数据中包含超过1行的ASCII字符,Oracle仍然将其视为扩展Unicode字符,因此查询返回为1。

样本数据:

qwerty
qwerty
regex oracle clob
1个回答
0
投票

在进行 ASCII 检查之前,您可以使用

TRANSLATE
技巧从字符串中删除所有换行符、回车符或制表符。

SELECT CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END AS contains_extended_unicode 
FROM my_table
WHERE REGEXP_LIKE(
    TRANSLATE(my_column, CHR(10) || CHR(13) || CHR(09), ''),
    '[^[:print:]]'
);
© www.soinside.com 2019 - 2024. All rights reserved.