2010-05-21 56 views
0

最近我的工作不好的内容(如广告后)一BBS.And的过滤器我写一个函数来检测一个字符串在另一个字符串没有下文continuously.Code包含字符串:检测由另一间断

$str = 'helloguys'; 
$substr1 = 'hlu'; 
$substr2 = 'elf'; 

function detect($a,$b) //function that detect a in b 
{ 
    $c = ''; 
    for($i=0;$i<=strlen($a);$i++) 
    { 
     for($j=0;$j<=strlen($b);$j++) 
     { 
      if($a[$i] == $b[$j]) 
      { 
       $b=substr($b,$j+1); 
       $c .=$a[$i]; 
       break; 
      } 
     } 
    } 
    if($c == $a) return true; 
    else return false; 
} 

var_dump(detect($substr1,$str)); //true 
var_dump(detect($substr2,$str)); //false 

由于过滤器在用户完成他们的帖子之前工作,所以我认为这里的效率很重要。我不知道是否有更好的解决方案?谢谢!

回答

1

更快的方法做,这是转换$一个正则表达式,并以$ B匹配,所以你只是离开了优化的PCRE模块本身,这是用C代码。

例如:

detect("hlu",$b) is equal to preg_match("/h.*l.*u/", $b) 
(detect("hlu",$b) && detect("elf",$b)) is equal to preg_match("/(h.*l.*u|e.*l.*f)/", $b) 
+0

这是可行的,我会检查它对mine.Thanks。 – Young 2010-05-21 06:07:09

0

不知道你为什么会想这样做。但我很无聊

function detect($a,$b) { 

    return count(array_intersect(str_split($b), str_split($a))) == strlen($b); 

} 
+0

对不起,但我不认为这将工作,因为此解决方案不考虑字符串中的顺序或重复字符。 – Young 2010-05-21 06:14:13