从 abc.txt 构造出 trie 树,然后匹配即可
算法在精华区中

解决方案 »

  1.   

    以 http://bbs.csdn.net/topics/390221822 的 ttrie 类为例
    trie = new TTrie;
    foreach(file('abc.txt') as $r) $trie->set(strtok($r, '|'));
    $s =<<< TXT
    输入内容坏蛋123
    TXT;
    //仅识别
    print_r($trie->match($s));
    /* 得
    Array
    (
        [0] => 输入内容
        [1] => 坏蛋
        [2] => 123
    )
    *///去掉字典字
    $trie->savematch = 0;
    print_r($trie->match($s));
    /* 得
    Array
    (
        [0] => 输入内容
        [1] => 123
    )
    */显然已经满足你的需要了
    输出结果时连接数组为串就可以了如果是想加亮关键字,可以这样class mytrie extends ttrie {
      function b() {
        $this->buffer[] = '<b>' . array_pop($this->buffer) . '<b/>';
      }
    }
        
    $trie = new mytrie;
    foreach(file('abc.txt') as $r) $trie->set(strtok($r, '|'), 'b');
    $s =<<< TXT
    输入内容坏蛋123
    TXT;
    print_r($trie->match($s));
    /* 得
    Array
    (
        [0] => 输入内容
        [1] => <b>坏蛋<b/> 《== 这个就被突出显示了
        [2] => 123
    )
    */其实渔已经给你了,鱼还是自己动手的好为了使实例化的对象得以复用,还应在 match 方法开始处加入    $this->buffer = array();
        $this->input = 0;
        $this->backtracking = 0;
    以重新初始化数据指针