Ric*_*dXu 2 php string algorithm highlight matching
今天我只需要知道哪些字符串匹配算法str_replace使用.我刚刚分析了php源代码,这个函数是在ext\standard\string.c.我刚刚发现了php_char_to_str_ex.谁能告诉我这个函数是用哪种算法编写的?(哪些算法实现str_replace此功能).
我只是想实现一个使用星期日算法的高亮程序(非常快速的算法,他们只说这个算法)
所以我认为这个功能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实现,有各种特殊情况需要处理.
但在大多数情况下,它归结为反复呼叫php_memnstr找到下一场比赛,并用memcpy.替换.
至于php_memnstr实现,只是memchr反复调用C 来尝试匹配搜索字符串的第一个字符,然后memcmp查看字符串的其余部分是否匹配.
搜索字符串没有花哨的预处理来优化重复搜索.这只是一个简单的蛮力搜索.
我应该补充一点,即使主题是一个数组,并且预处理搜索字符串会有一个优势,代码也没有做任何不同的事情.它只是调用php_str_replace_in_subject数组中的每个字符串.
| 归档时间: |
|
| 查看次数: |
844 次 |
| 最近记录: |