iT邦幫忙

1

Oracle正規表達式問題

  • 分享至 

  • xImage

我嘗試使用正規表達式要檢查字串中有無控制字元或CHR(128~159、160),
不過在測試使用單一大寫英字Z就會出現符合的情況(查詢結果是1,小寫z則結果為0),
想請教大神這是為什麼呢?
NLS_CHARACTERSET=AL32UTF8

SELECT COUNT(1) 
  FROM dual 
 WHERE REGEXP_LIKE('Z', '[[:cntrl:]]|[\x80-\x9F]|\xA0');
尼克 iT邦大師 1 級 ‧ 2024-10-12 21:28:50 檢舉
https://blog.csdn.net/qq_36007926/article/details/84881637
會不會是字集問題?
我試過UTF8也是一樣的結果
猜測可能是[\x80-\x9F]的16進位轉換問題
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
尼克
iT邦大師 1 級 ‧ 2024-10-11 15:33:08
 REGEXP_LIKE(srcstr, pattern [,match_option]) 
在此函数中:

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

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

使用正则表达式
測試看看

由於實際上資料大小寫可能同時存在,預設c應該是合理
我測試改成i後,單看Z與z的結果一樣了!
不過在套用近似實際資料後,又出錯了......
您認為還有其他可能的原因嗎

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

我要發表回答

立即登入回答