Php 以智能、简单和高效的方式进行模式匹配

Php 以智能、简单和高效的方式进行模式匹配,php,pattern-matching,Php,Pattern Matching,我正在制作一个简单的php文件,用于匹配用户输入的字符串,搜索适合他的组。 我需要显示数据库中与字符串最大程度匹配的5条记录。 我还尝试了php和mysql中的soundex()函数。 我现在正试图为此设计一个正则表达式模式匹配器。 有人能为我推荐一个用于此目的的示例正则表达式模式吗? 是否有其他方法可以轻松实现且不太复杂/耗时。 我试着用一种距离算法来编写代码 我想要的基本上是 例如“dps”中的用户类型 php应该检索THO <?php function minimum($a,$b,$

我正在制作一个简单的php文件,用于匹配用户输入的字符串,搜索适合他的组。 我需要显示数据库中与字符串最大程度匹配的5条记录。 我还尝试了php和mysql中的soundex()函数。 我现在正试图为此设计一个正则表达式模式匹配器。 有人能为我推荐一个用于此目的的示例正则表达式模式吗? 是否有其他方法可以轻松实现且不太复杂/耗时。 我试着用一种距离算法来编写代码 我想要的基本上是 例如“dps”中的用户类型

php应该检索THO

<?php
function minimum($a,$b,$c)
{
    if($a>$b)
    {
        if($a>$c)
        {
            return $a;
        }
        else
        {
            return $c;
        }
    }
    else
    {
        if($b>$c)
        return $b;
        else
        return $c;
    }
}
function Distance($s ,   $t)
{

  $m=strlen($s);
  $n=strlen($t);
  $d[]=array();
for( $i=0;$i<$m;$i++)
{

    for($j=0;$j<$n;$j++)
    {

        $d[$i][$j]=0;

    }

}

for ( $i=0; $i<$m;$i++)
  {
    $d[$i][0] = $i;
  }
for( $j=0;$j<$n;$j++)
  {
    $d[0][$j] = $j;
  }

  for ($j=1;$j<$n;$j++)
  {
    for ($i=1;$i<$m;$i++)
    {
      if ($s[$i] ==$t[$j])
        $d[$i][$j] =$d[$i][$j];       // no operation required
      else
        $d[$i][ $j] = minimum
                   (
                     $d[$i-1][ $j] + 1,
                     $d[$i] [$j-1] + 1,
                     $d[$i-1][ $j-1] + 1
                   );
    }
  }

  return $d[$m-1][$n-1];

}

?>`
`

实现这一目标的方法有很多:

  • 您可以尝试Levenshtein:它用于计算两个字符串之间的距离
  • 考虑到regexp,如果可以使用不同的字符串长度,您将遇到麻烦
  • 另一个选择是考虑弹性搜索。http://www.elasticsearch.org/)或索尔(http://lucene.apache.org/solr/)如果你有很多文本数据,这可能是最好的选择
您可能需要添加一些示例输入/输出数据。目前,我至少看不出你的问题是什么。如果你看过我的代码,我已经完全按照你的建议做了。也许你认为我附加了一些毫无意义的代码只是为了它。谢谢你的建议。我尝试了弹性搜索。它工作得非常好。谢谢。你太棒了