在给定文本之前需要获得10个单词和10个单词。我的意思是需要在关键词之前开始10个单词,并在关键词之后以10个单词结束。
鉴于文字:“二十三”
主要技巧:内容包含一些html标签等。标签只需要使用此内容保留该标签。需要显示10before - 10after之后的单词
内容如下:
removed
谢谢
答案 0 :(得分:1)
这个方法假定单词只用空格(不是制表符,换行符或其他空格)分隔,并且依赖于PHP库函数“strip tags”,它可能假定格式良好的HTML(根据我的经验,这是一个不好的假设)。
$string_content = strip_tags($html_content);
$start_cursor = $end_cursor = strpos($string_content, 'Twenty-three');
for($i = 0; $i < 10; $i++) { // rewind backwards until we find 10 spaces
$start_cursor = strrpos($string_content, ' ', $start_cursor);
}
for($i = 0; $i <= 10; $i++) { // skip forward until we find eleven spaces
$end_cursor = strpos($string_content, ' ', $end_cursor);
}
$result_string = substr($string_content, $start_cursor, $end_cursor - $start_cursor);
未经测试但我相信这是一种有效的方法
可选地,您可以对空白进行消毒:
$string_content = strip_tags($html_content);
$string_content = preg_replace("/\s+/", " ", $string_content); // replace any number of adjacent whitespace characters with a single space
答案 1 :(得分:0)
<?php
$find = 'Twenty-three';
$words = explode(' ', $string);
$wordsLimit = 10; // 10 words
// Number of words
$wordsLength = count($words);
// Find the position of the word ($find) inside the phrase
$findPosition = (in_array($find, $words)) ? array_search($find, $words) : 0;
// Cut the phrase
$beforeIndex = max(0, ($findPosition - $wordsLimit));
$afterIndex = min($wordsLength, ($findPosition + $wordsLimit + 1));
$words = array_slice($words, $beforeIndex, $afterIndex);
// Display the final phrase
$string = join(' ', $words);
echo $words;
?>
答案 2 :(得分:0)
这应该可以解决问题:
function getSurrounding($string, $needle){
// Strip html tags
$string = strip_tags($string);
// Concat blank characters
$string = preg_replace('`\\s+`', ' ', $string);
// Use some regexp magic
preg_match_all('`(?:[^ ]+ ){10}'.$needle.'(?: [^ ]+){10}`', $string, $blocks);
return $blocks[0];
}