Php 不连续地检测另一个字符串包含的字符串

Php 不连续地检测另一个字符串包含的字符串,php,string,contains,Php,String,Contains,最近,我正在处理一个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

最近,我正在处理一个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
$str='helloguys';
$substr1='hlu';
$substr2='elf';
函数detect($a,$b)//在b中检测a的函数
{
$c='';

对于($i=0;$i来说,一种更快的方法是将$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)

不知道你为什么要这么做,但我很无聊

function detect( $a,$b ) {

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

}

这是可行的,我会检查它。谢谢。很抱歉,但我认为这不会起作用,因为这个解决方案不考虑字符串中的顺序或重复字符。