我尝试使用正规表达式要检查字串中有无控制字元或CHR(128~159、160),不过在测试使用单一大写英字Z就会出现符合的情况(查询结果是1,小写z则结果为0),想请教大神这是为什么呢?NLS_CHARACTERSET=AL32UTF8

SELECT COUNT(1)
FROM dual
WHERE REGEXP_LIKE(\'Z\', \'[[:cntrl:]]|[\\x80-\\x9F]|\\xA0\');

1 个回答

1

尼克

iT邦大师 1 级 ‧ 2024-10-11 15:33:08

 REGEXP_LIKE(srcstr, pattern [,match_option]) 
在此函数中:

srcstr:搜索值
pattern:正则表达式
match_option:用于更改默认匹配的选项。可以包含以下一个或多个值:

“c”:使用区分大小写的匹配(默认值)
“i”:使用区分大小写的匹配
“n”:允许匹配任何字符的运算符
“m”:将源字符串作为多行处理

使用正则表达式
测试看看


  • 1

cct8888991155

iT邦新手 5 级 ‧
2024-10-11 16:05:30

由于实际上资料大小写可能同时存在,预设c应该是合理
我测试改成i后,单看Z与z的结果一样了!
不过在套用近似实际资料后,又出错了......
您认为还有其他可能的原因吗

SELECT COUNT(1) 
  FROM dual 
 WHERE REGEXP_LIKE(\'G3365-ACS-39AS\', \'[[:cntrl:]]|[\\x80-\\x9F]|\\xA0\', \'i\');

修改