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