NCLOB 列からテキストを取得し、XML 経由でデータを返す Web サービスがあります。NCLOB 列は、ドキュメントからテキストを抽出することによって入力されるため、無効な XML 文字が XML に配置され、消費システムが失敗する場合があります。
W3Cによると、有効な文字の範囲は次のとおりです。
#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
/* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
私たちはいくつかの異なる RegExp パターンを試しましたが、それに近づいていますが、まだ完全には到達していません。ここが一番近いところです。上位サロゲート (DB9B - DBFF) を除いて、すべての無効な文字が置き換えられます。
REGEXP_REPLACE(
TEXT,
'[^[:print:]' || chr(13) || chr(10) || ']|[' || UNISTR('\FFFE-\FFFF') || ']',
'*')
これも試しましたが、サロゲート (D800 - DFFE) はどれも置き換えられません。
REGEXP_REPLACE(REPLACE(TEXT, unistr('\0000'), ' '),
'[' || unistr('\0001-\0008') || ']'
|| '|[' || unistr('\000B-\000C') || ']'
|| '|[' || unistr('\000E-\001F') || ']'
|| '|[' || unistr('\D800-\DFFF') || ']'
|| '|[' || unistr('\FFFE-\FFFF') || ']',' ')
上位のサロゲートをどのように一致させることができますか? ご意見やご指導をいただければ幸いです。