gpt4 book ai didi

php str_replace 是用什么字符串匹配算法写的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:28:41 25 4
gpt4 key购买 nike

今天我只需要知道 str_replace 使用了哪些字符串匹配算法。我刚刚分析了php源码,这个函数在ext\standard\string.c中。我刚发现 php_char_to_str_ex。谁能告诉我这个函数是用什么算法写的? (哪些算法实现了str_replace这个功能)。

我只想实现一个使用 Sunday 算法的高亮程序(非常快的算法,他们只说这个算法)

所以我认为这个函数 str_replace 可能符合我的目标,所以我只是分析了它,但我的 C 太差了,所以请大家帮助我。

最佳答案

简短的回答:这只是一个简单的暴力搜索。

str_replace 函数实际上只是 php_str_replace_common 的转发器。对于主题不是数组的简单情况,它又会调用 php_str_replace_in_subject。同样,当搜索参数只是一个字符串,并且超过 1 个字符时,调用 php_str_to_str_ex

查看 php_str_to_str_ex 实现,处理了各种特殊情况。

  1. 如果搜索字符串和替换字符串的长度相同,则内存处理会更容易,因为您知道结果字符串的大小将与源字符串相同。
  2. 如果搜索字符串比源字符串长,您知道它永远找不到任何东西,因此您可以简单地返回未更改的源字符串。
  3. 如果搜索字符串长度与源字符串长度相同,则只是直接比较。

但在大多数情况下,它归结为重复调用 php_memnstr 以查找下一个匹配项,并将该匹配项替换为 memcpy

至于php_memnstr 实现,只是反复调用C 的memchr 来尝试匹配搜索字符串的第一个字符,然后是memcmp 查看字符串的其余部分是否匹配。

没有花哨的搜索字符串预处理来优化重复搜索。这只是一个简单的暴力搜索。

我应该补充一点,即使主题是一个数组,并且预处理搜索字符串会有优势,代码也没有做任何不同的事情。它只是为数组中的每个字符串调用 php_str_replace_in_subject

关于php str_replace 是用什么字符串匹配算法写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com