提取开始从字符串中特定字母在PHP

问题描述:

我需要在单词或单词任何其他字符的中间确切的搜索词相同的字符或类似性质不发一言。 该程序是在PHP中。 在此先感谢。提取开始从字符串中特定字母在PHP

+3

我们需要你发布你的尝试到目前为止。由于 – 2012-03-12 07:27:22

+0

如果我搜索一个词与COC它会显示库谢开始,科钦我不想,我需要确切的词与科钦 – 2012-03-12 07:30:02

+0

开始你需要找回在句子中的位置?或者提取以$针开头的实际单词?而你的意思是“相似”? – 2012-03-12 07:30:53

只是为了演示绝对相匹配的非正则表达式的解决方案:

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really.'; 

$matches = array_filter(str_word_count($sentence,1), 
         function($item) use ($needle) { 
          return (substr($item,0,strlen($needle) == $needle)); 
         } 
         ); 

编辑

说明:

str_word_count()函数的第二个参数1或2返回$ string中所有单词的数组。这比在空间上爆炸要好,因为它也会考虑其他标点符号(例如“科钦”之后的逗号)。

词语进行阵列然后用过滤的回调(定义为一个lambda或匿名功能)进料至array_filter()功能,一起。 lambda为数组参数中的每个条目($ item)返回true或false:如果该条目的真实值包含在$ matches中;如果是假的,那么它不是。

定义的拉姆达函数传递每个$项目依次(阵列条目),并且还$针(由“使用”条款的方式)。它只是比较$ item值的第一个字符和针,并根据匹配返回true或false。请注意,这是一个区分大小写的比较。如果你想不区分大小写,你可以在比较之前使用strtoupper()或strtolower()来对付substr()值和$ needle值。

如果你想要一个“类似”的比赛,那么你可以取代在$项目和$针的levenshtein()similar_text()值的比较lambda函数的比较,以%年龄相似(或可能的metaphone()功能)来确定它们是否应该被认为是相似的。

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really; and "couchey" is pretty cool too'; 

$matches = array_filter(str_word_count($sentence,1), 
         function($item) use ($needle) { 
          return (levenshtein($item,$needle,1,1,0) == 0); 
         } 
         ); 
+0

我需要对此进行解释。我认为这可能有帮助,我接受但需要说明 – 2012-03-12 07:59:22

你正在寻找的正则表达式是\b(NEEDLE\w+)。像这样:

$needle = 'coc'; 
$sentence = 'I loves me some cochin, really.'; 

if (preg_match('/\b(' . preg_quote($needle, '/') . '\w+)/', $sentence, $match)) { 
    echo $match[1]; 
} 
+0

这不是有益的,我需要有点类似的话没有太多的不同的词感谢您的答复 – 2012-03-12 07:48:31

+0

遗憾的是,基于对你的问题的一句话描述你的含糊一个跑,我不能完全满足您的需求 – deceze 2012-03-12 08:15:36

+0

感谢您事先我试图发展句子形成 – 2012-03-12 09:47:32