CHR(0)
(とりわけ)Cプログラミング言語で文字列を終了するために使用される文字です。
CHR(0)
を渡すと 次に、関数に渡して、渡した文字列を解析し、その文字列から正規表現パターンを構築する下位レベルの関数に渡します。この正規表現パターンには、CHR(0)
が表示されます。 それが文字列ターミネータであると考え、残りのパターンを無視します。
REGEXP_REPLACE
を使用すると、動作がわかりやすくなります。 :
SELECT REGEXP_REPLACE( 'abc' || CHR(0) || 'e', CHR(0), 'd' )
FROM DUAL;
これを実行するとどうなりますか:
-
CHR(0)
正規表現にコンパイルされ、文字列ターミネータになります。 - これで、パターンは単なる文字列ターミネータであるため、パターンは長さゼロの文字列になります。
- 次に、正規表現が入力文字列と照合され、最初の文字
a
が読み取られます。a
の前に長さがゼロの文字列を一致させることができることを見つけます したがって、a
の前に一致したものはすべて置き換えられますd
を使用 出力にda
を与える 。 - 次に、
b
を変換する次の文字に対して繰り返されますdb
へ 。 - 文字列の終わりに到達して長さがゼロのパターンに一致し、最後の
d
が追加されるまで、以下同様に続きます。 。
そして、あなたは出力を得るでしょう:
dadbdcd_ded
(ここで、_はCHR(0)
です。 キャラクター。 )
注:CHR(0)
入力のは置き換えられません。
使用しているクライアントプログラムがCHR(0)
でも文字列を切り捨てている場合 出力全体が表示されない場合があります(これは、クライアントが文字列を表す方法の問題であり、Oracleの出力ではありません)が、DUMP()
を使用して表示することもできます。 :
SELECT DUMP( REGEXP_REPLACE( 'abc' || CHR(0) || 'e', CHR(0), 'd' ) )
FROM DUAL;
出力:
Typ=1 Len=11: 100,97,100,98,100,99,100,0,100,101,100
[TL; DR] では、何が起こっているのか
REGEXP_LIKE( '1234567890', CHR(0) )
長さゼロの文字列正規表現パターンを作成し、1
の前に長さゼロの一致を探します。 文字-それが見つけて、一致するものを見つけたことを返します。