PHP,Java和Python的字符串匹配算法(模式匹配)

数据结构和算法书一般会介绍KMP算法,其实KMP算法的性能并不好。查看Java源码和PHP源码后,发现他们使用了如下的匹配算法。

各语言使用的匹配算法

  • Java使用的是朴素匹配。
  • PHP使用的是首尾匹配法。php7开始,源字符串(haystack)大于等于1024并且目标字符串(needle)大于等于9,会用Sunday算法。
    • zend_memnstr。用于字符串匹配。首尾匹配算法。在Zend/zend_operators.h。
    • zend_memnstr_ex。用于字符串匹配。 Sunday算法。在Zend/zend_operators.c
  • Python使用简化的Boyer-Moore算法,并且结合了Horspool和Sunday的一些思路。源码在Objects/stringlib/fastsearch.h。算法介绍 http://effbot.org/zone/stringlib.htm
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 版权声明:本文源自简书tianma,转载请务必注明出处: http://www.jianshu.com/p/e2b...
    tianma阅读 20,229评论 7 15
  •   在文本处理中,关键字匹配是一个十分常用且重要的功能。关键字称为模式串,在文本T中寻找模式串P出现的所有出现的位...
    老羊_肖恩阅读 4,533评论 1 4
  • 字符串匹配算法之Sunday算法 背景 我们第一次接触字符串匹配,想到的肯定是直接用2个循环来遍历,这样代码虽然简...
    houskii阅读 10,009评论 10 25
  • 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目。此算法通常输入为原字符串(strin...
    lllnan阅读 271评论 0 0
  • 字符串匹配KMP算法详解 1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有...
    张晨辉Allen阅读 2,430评论 0 3