文章目录

  • 第五十七章 Caché 函数大全 $REPLACE 函数
  • ​大纲​



第五十七章 Caché 函数大全 $REPLACE 函数

返回一个新字符串,该字符串由输入字符串中的子字符串替换子字符串组成。

大纲

$REPLACE(string,searchstr,replacestr,start,count,case)

参数

  • string 源字符串。它可以是数值,字符串文字,变量名称或任何有效的ObjectScript表达式。如果string是一个空字符串(​​“”​​​),则​​$REPLACE​​返回一个空字符串。
  • searchstr 要在字符串中搜索的子字符串。它可以是数值,字符串文字,变量名称或任何有效的ObjectScript表达式。如果searchstr是一个空字符串(​​“”​​​),则​​$REPLACE​​返回字符串。
  • replacestr 替换子字符串替换了字符串中searchstr的实例。它可以是数值,字符串文字,变量名称或任何有效的ObjectScript表达式。如果replacestr是一个空字符串(​​“”​​​),则​​$REPLACE​​返回已删除出现的searchstr的字符串。
  • start 可选-字符串中开始子字符串搜索的字符计数位置。字符串字符从1开始计数。值0,负数,非数字字符串或空字符串等于1。如果省略,则假定为1。如果start> 1,则返回以该字符开头的字符串的子字符串,并执行子字符串替换(如果有)。如果start > ​​$LENGTH(string)​​​,则​​$REPLACE​​​返回空字符串(​​“”​​)。
  • count 可选-要执行的子字符串替换的数量。如果省略,则默认值为-1,这意味着执行所有可能的替换。值0,非-1的负数,非数字字符串或空字符串等价于0,这意味着不执行任何替换。如果指定了start,则count从起始位置开始子字符串替换。
  • case 可选—布尔值标志,指示字符串中searchstr的匹配是否区分大小写。 0 =区分大小写(默认)。 1 =不区分大小写。任何非零数字都等于1。任何非数字值都等于0。如果未指定start或count,则可以提供占位符逗号。

描述

​$REPLACE​​​函数返回一个新字符串,该字符串由输入字符串的逐个字符串替换组成。它在字符串中搜索searchstr子字符串。如果​​$REPLACE​​找到一个或多个匹配项,它将用replacestr替换searchstr子字符串,并返回结果字符串。 replacestr参数值可以比searchstr长或短; replacestr可能是一个空字符串。

默认情况下,​​$REPLACE​​从字符串的开头开始,并替换每个searchstr实例。可以使用可选的start参数在字符串中的指定字符计数位置开始比较。返回的字符串是字符串的子字符串,该字符串的子字符串从起始位置开始,并从该位置替换searchstr的每个实例。

可以使用可选的count参数来仅替换指定数量的匹配子字符串。

默认情况下,​​$REPLACE​​子字符串匹配区分大小写。可以使用可选的case参数来指定不区分大小写的匹配。

注意:因为​​$REPLACE​​​可以更改字符串的长度,所以不应在编码的字符串值(例如ObjectScript ​​$List​​​或​​%List​​​对象属性)上使用​​$REPLACE​​。

REPLACE和TRANSLATE

​$REPLACE​​​执行字符串对字符串的匹配和替换。 ​​$TRANSLATE​​​执行字符对字符的匹配和替换。 ​​$REPLACE​​​可以将一个或多个字符的单个指定子字符串替换为另一个子字符串。 ​​$TRANSLATE​​可以用对应的指定新字符替换多个指定字符。默认情况下,这两个函数都会替换字符串中所有匹配的实例。

​$REPLACE​​​匹配默认情况下区分大小写,但可以不区分大小写地调用; ​​$TRANSLATE​​​匹配始终区分大小写。 ​​$REPLACE​​​可以指定匹配的起点和/或要执行的替换次数; ​​$TRANSLATE​​替换源字符串中的所有匹配项。

示例

以下示例显示了使用​​$REPLACE​​​的两种方法。第一个​​$REPLACE​​​不会更改输入字符串的值。第二个​​$REPLACE​​通过将输入字符串值设置为等于函数的返回值来更改它:

/// d ##class(PHA.TEST.Function).REPLACE()
ClassMethod REPLACE()
{
SET str="The quick brown fox"
// 创建一个新字符串,不更改str值
SET newstr=$REPLACE(str,"brown","red")
WRITE "source string: ",str,!,"new string: ",newstr,!!
// 创建一个新的字符串并将字符串替换为新的字符串值
SET str=$REPLACE(str,"brown","silver")
WRITE "revised string: ",str
}
DHC-APP>d ##class(PHA.TEST.Function).REPLACE()
source string: The quick brown fox
new string: The quick red fox

revised string: The quick silver fox

在下面的示例中,​​$REPLACE​​的调用匹配并替换子字符串的所有实例以及子字符串的前两个实例:

/// d ##class(PHA.TEST.Function).REPLACE1()
ClassMethod REPLACE1()
{
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
SET newsome2=$REPLACE(str,"111","AAA",2,2)
WRITE !,"after replacement ",newsome2
}
DHC-APP>d ##class(PHA.TEST.Function).REPLACE1()

before conversion 1110/1110/1100/1110
after replacement AAA0/AAA0/1100/AAA0
after replacement AAA0/AAA0/1100/1110

在以下示例中,​​$REPLACE​​的调用执行区分大小写而不区分大小写的匹配,并替换字符串中所有出现的情况:

/// d ##class(PHA.TEST.Function).REPLACE2()
ClassMethod REPLACE2()
{
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
}
DHC-APP>d ##class(PHA.TEST.Function).REPLACE2()

before conversion Yes/yes/Y/YES/Yes
after replacement NO/yes/Y/YES/NO
after replacement NO/NO/Y/NO/NO

下面的示例比较​​$REPLACE​​​和​​$TRANSLATE​​函数:

/// d ##class(PHA.TEST.Function).REPLACE3()
ClassMethod REPLACE3()
{
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
}
DHC-APP>d ##class(PHA.TEST.Function).REPLACE3()

before conversion A mom, o plom, o comal, Pomama
after replacement A man, o plan, o canal, Panama
after translation A nan, a plan, a canal, Panana

在下面的示例中,​​$REPLACE​​的四参数形式仅返回从起点开始的字符串部分,并执行字符串对字符串的替换:

/// d ##class(PHA.TEST.Function).REPLACE4()
ClassMethod REPLACE4()
{
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
}
DHC-APP>d ##class(PHA.TEST.Function).REPLACE4()

before start replacement A mon, a plon, a conal, Ponama
after start replacement a plan, a canal, Panama