如何获取文本中另一个单词的上一个和后一个单词?

时间:2014-01-08 16:35:11

标签: php text

我有一个HTML格式的文本和一些带有一些单词的数组。像这样:

$text = '<h1>Lorem ipsum dolor sit amet</hi><p>consectetur adipiscing elit. Sed eu leo magna. Curabitur <b>fermentum dapibus</b> nulla fermentum ultrices.</br> Duis <i>in</i> magna quam. Proin laoreet lorem vitae tortor tempus dictum. Morbi.</p>';

$words = array('elit', 'ultrices', 'in', 'house');

现在,我想检查$words$text中的元素是否存在,如果存在,我想获得一个包含三个字的子串的数组(在$words$text中的每个元素都存在于$array_words[0] = 'adipiscing elit. Sed'; $array_words[1] = 'fermentum ultrices. Duis'; $array_words[2] = 'Duis in magna'; 中。像这样:

{{1}}

我知道如何搜索单词,但我不知道在文本中获取上一个和后一个单词的任何简单方法。

3 个答案:

答案 0 :(得分:1)

放手一搏:

function getwords($text, $words){
    $r = array();
    $text = strip_tags($text);
    foreach($words as $word){
        preg_match_all('/(\w+\W+|^)' . $word . '(\W+\w+|$)/',$text,$m);

        foreach ( $m[0] as $match ){
            if ( !empty($match) )
                array_push($r,$match);
        }
    }
    return $r;
}

$text = 'Lorem ipsum dolor sit amet</hi><p>consectetur adipiscing elit. Sed eu leo magna. Curabitur <b>fermentum dapibus</b> nulla fermentum    ultrices.</br> Duis <i>in</i> magna quam. Proin  laoreet lorem vitae tortor tempus dictum. Morbi.</p> Lorem';
$words = array('elit', 'ultrices', 'in', 'Lorem');
print_r(getwords($text, $words));

结果:

Array
(
    [0] => adipiscing elit. Sed
    [1] => fermentum    ultrices. Duis
    [2] => Duis in magna
    [3] => Lorem ipsum
    [4] => Morbi. Lorem
)

还应处理第一个或最后一个单词的匹配情况,如“Lorem”字符串所示。

如果单词显示两次,我不确定你的结果会显示什么,所以我只返回了单词的所有实例。

答案 1 :(得分:0)

//remove HTML tags
$text = strip_tags($text);

//replace double spaces, newline and tab with single space
$text = preg_replace('/\s+/', ' ',$text);

//split string in array of words
$p = explode (' ', $text);

...现在使用数组索引来检查上一个和下一个元素

答案 2 :(得分:0)

你可以用空格爆炸你的字符串

$arr=explode(" ",$text);
$final_arr=array();
foreach($words as $key=>$value)
{
$key = array_search($value, $arr);
 if($key)
 {
    $final_arr[]=$arr[$key-1].$arr[$key].$arr[$key+1];
 }
}