最近我正在处理BBS的不良内容(例如广告帖子)过滤器。我写了一个函数来检测字符串是不是连续的另一个字符串。编码如下:
$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
由于过滤器在用户发帖之前工作,所以我认为这里的效率很重要。我想知道是否有更好的解决方案?谢谢!
答案 0 :(得分:1)
更快的方法是将$ a转换为正则表达式并将其与$ b匹配,这样您就可以将优化保留到用C代码编写的PCRE模块本身。
例如:
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)
答案 1 :(得分:0)
不确定为什么要这样做。但我很无聊
function detect( $a,$b ) {
return count( array_intersect( str_split($b), str_split($a) ) ) == strlen($b);
}