我有一个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}}
我知道如何搜索单词,但我不知道在文本中获取上一个和后一个单词的任何简单方法。
答案 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];
}
}