Как выбрать первые два предложения из базы данных? - PullRequest
0 голосов
/ 08 ноября 2011

В настоящее время я делаю это, чтобы получить первые 20 слов:

   $thewhat = $row['about_field'];

   $shortened = implode(' ', array_slice(explode(' ', $thewhat), 0, 20));

Но это выглядит грязно, как я могу сделать так, чтобы были выбраны только первые 2 предложения?

Ответы [ 2 ]

1 голос
/ 08 ноября 2011
<?
//extend this regexp [.?] as you need.
$text = 'codepad is an online compiler/interpreter, and a simple collaboration tool.Paste your code below, and codepad will run it and give you a short URL you can use to share it in chat or email? qwe asd zxc.';
$sentences = preg_split('/([.?]+)/', $text, -1, PREG_SPLIT_NO_EMPTY|PREG_SPLIT_DELIM_CAPTURE); 
/*
print_R($sentences); 
Array
(
    [0] => codepad is an online compiler/interpreter, and a simple collaboration tool
    [1] => .
    [2] => Paste your code below, and codepad will run it and give you a short URL you can use to share it in chat or email
    [3] => ?
    [4] =>  qwe asd zxc
    [5] => .
)
*/
$shorted = $sentences[0] . $sentences[1] . $sentences[2] . $sentences[3];
echo $shorted;
?>
1 голос
/ 08 ноября 2011

Если ваши предложения разделены точками, вы можете попробовать

$shortened = implode('.', array_slice(explode('.', $thewhat), 0, 2)) . '.';

Так как это будет работать только для предложений, разделенных точками, и предложений без точек в предложении, вот регулярное выражение, которое может помочь вам с большинством частей:

$pattern = '/(\S.+?[.!?])(?:\s+|$)/';
$matches = preg_split($pattern, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); 
$shortened = $matches[0] .' '. $matches[1];

Регулярное выражение украдено из: Что такое регулярное выражение для разбора отдельных предложений? , но слегка изменено, чтобы не включать соответствующие пробельные символы после каждого предложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...