文字列を編集したいと思います。近くの2桁の数字と文字(00→0a、01-0b、23-2cなど)
111324→1b1d2eから取得します。 はその後、私のコード:Oracle。無効な正規表現の結果のASCII値
set serveroutput on size unlimited
declare
str varchar2(128);
function convr(num varchar2) return varchar2 is
begin
return chr(ascii(num)+49);
-- return chr(ascii(num)+49)||'<-'||(ascii(num)+49)||','||ascii(num)||','||num||'|';
end;
function replace_dd(str varchar2) return varchar2 is
begin
return regexp_replace(str,'((\d)(\d))','\2'||convr('\3'));
end;
begin
str := '111324';
Dbms_Output.Put_Line(str);
Dbms_Output.Put_Line(replace_dd(str));
end;
しかし、私は次の文字列を取得 '112'。私はI'vが得たコメント返される文字列で結果を確認し
: '| 1 < -141,92,3 | 1 < -141,92,1を2 < -141,92,4 |'。
ascii(num)はnumに依存しません。それは常にascii( '\')のように動作します。それは92で、さらに49で141を得て、それはアスキーテーブルから出ています。しかし、それだけでnumは正しく印刷されます。 正しい値を取得するにはどうすればよいですか?または、この問題を解決する別の方法ですか?
私が手に '<-141,92、3 \ |'コメントアウト行から。あなたが期待している後方参照ではなく、文字 '\ 3 'が渡されているようです。 ''は '' regexp_replace(str、 '((\ d)(\ d))'、 '\ 2') 'から取得したもので、' convr'は印刷できないものがあります。 –
@AlexPooleどのようにconvr()に正しい値を送るか? –
これは不可能です。 'FOR i IN 1. INLAY(str)LOOP ...'のみです。 – Mike