$REPLACE (ObjectScript)
構文
$REPLACE(string,searchstr,replacestr,start,count,case)
引数
引数 | 説明 |
---|---|
string | ソース文字列。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。string が空文字列 ("") の場合、$REPLACE は空文字列を返します。 |
searchstr | string 内で検索する部分文字列。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。searchstr が空文字列 ("") の場合、$REPLACE は string を返します。 |
replacestr | string の searchstr のインスタンスと置換される置換部分文字列。数値、文字列リテラル、変数名等、任意の有効な ObjectScript 式を使用できます。replacestr が空文字列 ("") の場合、$REPLACE は searchstr の出現箇所を削除して string を返します。 |
start | オプション — 部分文字列の検索を開始する string 内の文字カウント位置。文字列は 1 からカウントされます。0、負の数字、非数値文字列または空の文字列は、1 と同じです。省略した場合、1 と見なされます。start > 1 の場合、部分文字列 (存在する場合) の置換を実行して、その文字で始まる string の部分文字列が返されます。start > $LENGTH(string) の場合、$REPLACE は空の文字列 ("") を返します。 |
count | オプション — 部分文字列を置換する回数。省略した場合、既定値は -1 です。これは、可能なすべての置換を実行します。0、-1 以外の負の数字、非数値文字列または空の文字列は、置換を実行しないことを意味する 0 と同じです。start が指定されている場合、count は、start の位置から部分文字列の置換を開始します。 |
case | オプション — string の searchstr のマッチングで大文字と小文字を区別するかどうかを示すブーリアン・フラグ。0 は大文字と小文字を区別します (既定値)。1 は大文字と小文字を区別しません。ゼロ以外の数は、1 と同様です。数値以外の値は、0 と同様です。プレースホルダのコンマは、start または count が指定されていない場合に指定できます。 |
説明
$REPLACE 関数は、入力文字列の文字列単位の置換で構成される新しい文字列を返します。string で searchstr 部分文字列を検索します。$REPLACE が一致する値を 1 つ以上見つけると、searchstr 部分文字列を replacestr に置換し、結果の文字列を返します。replacestr 引数値は、searchstr より長い値も短い値も取ることができます。searchstr 部分文字列を削除するには、replacestr に空文字列 ("") を指定します。
既定では、$REPLACE は string の先頭から開始して、searchstr の各インスタンスを置換します。オプションの start 引数を使用して、文字列の中の指定された文字カウント位置で比較を開始できます。返される文字列は start の位置から始まり、それ以降の searchstr の各インスタンスを置換する string の部分文字列です。
オプションの count 引数を使用すると、一致する部分文字列の指定された数のみを置換できます。
既定では、$REPLACE 部分文字列マッチングは大文字と小文字が区別されます。オプションの case 引数を使用して、大文字と小文字が区別されないマッチングを指定することができます。
$REPLACE を使用すると文字列の長さが変わる場合があるため、ObjectScript %List や %List オブジェクト・プロパティなどのエンコードされた文字列値で $REPLACE を使用しないでください。
$REPLACE、$CHANGE、および $TRANSLATE
$REPLACE と $CHANGE は文字列と文字列をマッチングして置換します。これらは、1 つ以上の文字の単一の指定された部分文字列を別の任意の長さの部分文字列に置換できます。$TRANSLATE は文字と文字をマッチングして置換します。$TRANSLATE は、複数の指定された単一文字を対応する単一文字に置換できます。この 3 つの関数はすべて、一致する文字または部分文字列を削除 (NULL に置換) します。
$CHANGE では、常に大文字と小文字が区別されます。$REPLACE のマッチングでは既定で大文字と小文字が区別されますが、大文字と小文字を区別せずに呼び出すこともできます。$TRANSLATE のマッチングでは、常に大文字と小文字が区別されます。
$REPLACE と $CHANGE では、マッチングの開始ポイントおよび/または実行する置換の数を指定できます。$REPLACE と $CHANGE では、開始ポイントの定義方法が異なります。$TRANSLATE では常にソース文字列の一致対象がすべて置換されます。
例
以下の例は、$REPLACE の 2 つの使用法を示しています。最初の $REPLACE では、入力文字列値は変更されません。2 番目の $REPLACE では、関数の返り値と同じ値に設定することで、入力文字列値が変更されます。
SET str="The quick brown fox"
// creates a new string, does not change str value
SET newstr=$REPLACE(str,"brown","red")
WRITE "source string: ",str,!,"new string: ",newstr,!!
// creates a new string and replaces str with new string value
SET str=$REPLACE(str,"brown","silver")
WRITE "revised string: ",str
以下の例では、$REPLACE を呼び出して、部分文字列のすべてのインスタンスのマッチングと置換、部分文字列の最初の 2 つのインスタンスのマッチングと置換を実行します。
SET str="1110/1110/1100/1110"
WRITE !,"before conversion ",str
SET newall=$REPLACE(str,"111","AAA")
WRITE !,"after replacement ",newall
SET newsome=$REPLACE(str,"111","AAA",1,2)
WRITE !,"after replacement ",newsome
以下の例では、$REPLACE を呼び出して、大文字と小文字を区別するマッチングと大文字と小文字を区別しないマッチングを行い、文字列のすべての出現箇所を置換します。
SET str="Yes/yes/Y/YES/Yes"
WRITE !,"before conversion ",str
SET case=$REPLACE(str,"Yes","NO")
WRITE !,"after replacement ",case
SET nocase=$REPLACE(str,"Yes","NO",1,-1,1)
WRITE !,"after replacement ",nocase
以下の例では、$REPLACE 関数と $TRANSLATE 関数を比較します。
SET str="A mom, o plom, o comal, Pomama"
WRITE !,"before conversion ",str
SET s4s=$REPLACE(str,"om","an")
WRITE !,"after replacement ",s4s
SET c4c=$TRANSLATE(str,"om","an")
WRITE !,"after translation ",c4c
$REPLACE は "A man, o plan, o canal, Panama" を返します。
$TRANSLATE は "A nan, a plan, a canal, Panana" を返します。
以下の例で、$REPLACE の 4 引数形式は、開始ポイントから始まる文字列の一部のみを、文字列と文字列の置換を行って返します。
SET str="A mon, a plon, a conal, Ponama"
WRITE !,"before start replacement ",str
SET newstr=$REPLACE(str,"on","an",8)
WRITE !,"after start replacement ",newstr
$REPLACE は "a plan, a canal, Panama" を返します。