Php 将字符串的一部分与其他字符串的一部分匹配

Php 将字符串的一部分与其他字符串的一部分匹配,php,regex,string,preg-match,Php,Regex,String,Preg Match,我正在使用一个简单的搜索函数,其中我希望将字符串的一部分与另一个字符串的一部分进行匹配 例如: 搜索词是:水果袋 我想配一个产品:水果苹果包 我想创建一些内容,以便系统匹配: 水果袋 水果applebag 甚至“水果”和“袋子” 总之,;字符串中的部分需要与搜索词中的部分匹配。这可能吗 $products = array( 'fruit applebag', 'pinapple', 'carrots', 'bananas

我正在使用一个简单的搜索函数,其中我希望将字符串的一部分与另一个字符串的一部分进行匹配

例如: 搜索词是:水果袋 我想配一个产品:水果苹果包

我想创建一些内容,以便系统匹配:

  • 水果
  • 水果applebag
甚至“水果”和“袋子”

总之,;字符串中的部分需要与搜索词中的部分匹配。这可能吗

    $products = array(
        'fruit applebag',
        'pinapple',
        'carrots',
        'bananas',
        'coconut oil',
        'cabbage',
    );

    if( ! empty( $_POST['search'] ) ) {

        $s = $_POST['search'];
        $results = array();
        foreach( $products as $index => $product ) {

            if( preg_match( '/' . $s . '.*/i', $product, $matched ) ) {
                $results[] = $matched[0];
            }
        }
        print_r($results); 
        // This only returns fruit applebag if the search term is something like "fruit ap"
    }
使用类似的方法(将搜索的单词分成两部分,并查找匹配项,因为这两部分之间有字符):


这是可能的,但可能会非常昂贵。如上所述,您的要求是搜索词的任何子字符串都可能相关。因此,使用
水果袋
并生成所有子字符串的列表:

f,r,u,i,t,b,a,g,fr,ru,ui,it,tb,ba,ag,fru,rui,uit,...,bag,...,fruit,...,fruitbag
但是你可能不希望任何字母
a
匹配的单词。因此,第一种方法可能是指定最小字母数(例如3),这将显著限制潜在匹配。但即便如此。。。匹配
fru
rui
有意义吗

更好的方法是使用字典,从搜索字符串中提取实际单词或音节。(在您的情况下,从
水果袋
中提取
水果
袋子


你可以找到一本英语词典。

谢谢你的回答,它很有效,但正如埃里克·莱本格斯所说,它现在几乎可以匹配所有字符。所以我想我需要在上面添加最少的字符,比如3或4。当然,但我的解决方案是在
水果。*bag
中进行双重匹配。单一匹配的解决方案很简单,只需为
strlen
值添加条件语句即可。
Array ( [0] => fruit applebag [1] => fruit applebag )
f,r,u,i,t,b,a,g,fr,ru,ui,it,tb,ba,ag,fru,rui,uit,...,bag,...,fruit,...,fruitbag