从php中的字符串中提取以特定字母开头的单词

时间:2012-03-12 07:26:09

标签: php string

我需要在单词的中间或单词中的任何其他字符中搜索完全相同的字符或相似字符。    该程序是在PHP中。   提前谢谢。

2 个答案:

答案 0 :(得分:1)

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

$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));
                        }
                       );

修改

说明:

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

然后将该数组字符与过滤器回调(定义为lambda或匿名函数)一起提供给array_filter()函数。 lambda对数组参数中的每个条目($ item)返回true或false:如果为true,则该条目包含在$ matches中;如果是假的,那就不是。

定义的lambda函数依次传递每个$ item(数组条目),也传递$ needle(通过“use”子句)。它只是将$ item值的第一个字符与needle进行比较,并根据匹配返回true或false。请注意,这是一个区分大小写的比较。如果你想要不区分大小写,你需要在比较之前对substr()值和$ needle值使用strtoupper()或strtolower()。

如果你想要一个“相似”的匹配,那么你可以用lambda函数中的比较替换$ item和$ needle的levenshtein()similar_text()值,并且%age相似性(或可能是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);
                        }
                       );

答案 1 :(得分:0)

您正在寻找的正则表达式为\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];
}