delphi - StringReplace 无法替换字符串的所有实例

标签 delphi replace

Dephi 7 帮助手册提到了 StringReplace...

Returns a string with occurrences of one substring replaced by another substring...

If Flags does not include rfReplaceAll, StringReplace only replaces the first occurrence of OldPattern in S. Otherwise, StringReplace replaces all instances of OldPattern with NewPattern.

“否则,StringReplace 将用 NewPattern 替换所有 OldPattern 实例”的语句似乎是一个 BOGUS 语句,因为在下面的示例中,即使在我指示函数“替换'aa'(旧模式)与 'a'(新模式)”!

StringReplace('aaa aaa','aa','a',[rfReplaceAll]);

如果 Delphi 手册是准确的,那么我应该得到“a a”作为最终结果。不幸的是,我得到了“aa aa”。显然,并非所有“OldPattern”('aa')实例都被替换。

这是一个错误,还是仅仅是对该函数的误导/不准确的描述?

最佳答案

您误解了文档。如果用替换项替换搜索字符串实例的操作恰好创建了搜索字符串的另一个实例,则不会再次搜索它。搜索从替换文本的末尾继续。

该函数在输入字符串S中搜索目标字符串的所有实例。输入字符串不会被修改。为了获得您期望的输出,它必须在结果中搜索目标字符串的实例,而不仅仅是在输入中。

想象一下搜索字符串和替换字符串是否相同。该函数可能永远不会返回,因为每次它找到目标并替换它时,它都会找到目标文本的另一个副本。

关于delphi - StringReplace 无法替换字符串的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17606857/

相关文章:

Delphi 网络浏览器和 CSS3

Excel VBA 查找和替换

用虚拟图替换 ggplots 列表中的 NA

Java Regex 删除开始/结束单引号但保留内引号

powershell - 用 powershell 替换 csv 文件标题行

delphi - 使用 ADO 从另一个表上的查询创建新表

delphi - Delphi如何输入分数?

Javascript 用颜色突出显示所有排除的字符

delphi - 从 Delphi 2007 应用程序发送电子邮件

multithreading - 有没有办法给外部线程命名?