数据来源:
测试demo
demo1
中文2
输出:
demo
demo1
2
我尝试select regexp_replace('测试中文demo','[\u0391-\uFFE5]','') from dual
,但没有效果。并且\w
包括中文,因此请勿使用[^\w]
。
现在我可以想到select regexp_replace('测试中文demo','[^a-zA-Z0-9\s]','') from dual
。
有更好的方法吗?
答案 0 :(得分:3)
请参阅Searching Unicode characters in Oracle table:
通常使用正则表达式,您可以使用
\x
或\u
后跟十六进制代码来搜索任何字符。例如。\x20
将匹配空格。但是Oracle中的REGEXP_LIKE
不支持\x
。您需要使用unistr
function将代码转换为等效字符,然后将其与REGEXP_LIKE
一起使用。例如。REGEXP_LIKE(source,'[' ||unistr('\0020')|| ']');
所以,你需要像
这样的东西select regexp_replace('测试中文demo', '[' || unistr('\0391') || '-' || unistr('\9FA5') || ']','') from dual
注意:更好的中文正则表达式应包括以下所有范围:
----------------------------------------------------------------------------------
|Block | ES6 Range | ES5 Range |
|---------------------------------------------------------------------------------|
|CJK Unified Ideographs | 4E00-9FFF | \u4E00-\u9FFF |
|CJK Unified Ideographs Extension A | 3400-4DFF | \u3400-\u4DFF |
|CJK Unified Ideographs Extension B | 20000-2A6DF | \uD840\uDC00-\uD869\uDEDF|
|CJK Unified Ideographs Extension C | 2A700–2B73F | \uD869\uDF00-\uD86D\uDF3F|
|CJK Unified Ideographs Extension D | 2B740–2B81F | \uD86D\uDF40-\uD86E\uDC1F|
|CJK Unified Ideographs Extension E | 2B820–2CEAF | \uD86E\uDC20-\uD873\uDEAF|
|CJK Compatibility Ideographs | F900-FAFF | \uF900-\uFAFF |
|CJK Compatibility Ideographs Supplement | 2F800-2FA1F | \uD87E\uDC00-\uD87E\uDE1F|
----------------------------------------------------------------------------------
所以,试试
select regexp_replace('测试中文demo','[' || unistr('\4E00') || '-' || unistr('\9FFF') || unistr('\3400') || '-' || unistr('\4DFF') || unistr('\D840\DC00') || '-' || unistr('\D869\DEDF') || unistr('\D869\DF00') || '-' || unistr('\D86D\DF3F') || unistr('\D86D\DF40') || '-' || unistr('\D86E\DC1F') || unistr('\D86E\DC20') || '-' || unistr('\D873\DEAF') || unistr('\F900') || '-' || unistr('\FAFF') || unistr('\D87E\DC00') || '-' || unistr('\D87E\DE1F') || ']','') from dual
答案 1 :(得分:0)
使用REGEXP_REPLACE
SELECT REGEXP_REPLACE(YOURFIELD,'[^a-zA-Z'']','') AS outputfield
FROM YOURTABLE