Replace 函数中的 coldfusion 错误
coldfusion bug in Replace function
这是我的程序:
<cfset test = 'a~b~~c~d~~~e'>
<cfset test2 = Replace(test, '~~','~X~','all')>
<cfoutput>
test #test#
<br> test2 #test2#
<br>wanted: a~b~X~c~d~X~X~e
</cfoutput>
我得到的输出:
test a~b~~c~d~~~e
test2 a~b~X~c~d~X~~e
wanted: a~b~X~c~d~X~X~e
所以 test2 的输出是错误的这无疑与 Replace 函数的内部工作有关,但我需要它才能正常工作。
有人知道这个问题的解决方法吗?
这不是错误。
Replace() doesn't have any special "lookaround"能力。它只是遍历输入字符串,直到找到 ~~
。然后跳转到下一个字符 - after 匹配的文本 - 并继续搜索。结果只有两场比赛。
听起来更像是要求在任意两个波浪号“~~”之间插入一个“X”。具有非捕获前瞻性的正则表达式应该可以做到这一点。
reReplace(test, '~(?=~)','~X','all')
说明
~
查找代字号
(?=~)
.. 后跟另一个波浪号
这是我的程序:
<cfset test = 'a~b~~c~d~~~e'>
<cfset test2 = Replace(test, '~~','~X~','all')>
<cfoutput>
test #test#
<br> test2 #test2#
<br>wanted: a~b~X~c~d~X~X~e
</cfoutput>
我得到的输出:
test a~b~~c~d~~~e
test2 a~b~X~c~d~X~~e
wanted: a~b~X~c~d~X~X~e
所以 test2 的输出是错误的这无疑与 Replace 函数的内部工作有关,但我需要它才能正常工作。
有人知道这个问题的解决方法吗?
这不是错误。
Replace() doesn't have any special "lookaround"能力。它只是遍历输入字符串,直到找到 ~~
。然后跳转到下一个字符 - after 匹配的文本 - 并继续搜索。结果只有两场比赛。
听起来更像是要求在任意两个波浪号“~~”之间插入一个“X”。具有非捕获前瞻性的正则表达式应该可以做到这一点。
reReplace(test, '~(?=~)','~X','all')
说明
~
查找代字号(?=~)
.. 后跟另一个波浪号