Попробуйте это:
$string = ".".str_replace(".", "..", rtrim($string, '.')).".";
preg_match_all("~\.[^.]*?((19|20)\d{2})[^.]*?\.~", $string, $sentenceWithYear);
Обратите внимание, что вам нужно добавить дополнительные точки, которые будут действовать как точки останова для регулярного выражения. Каждое предложение должно иметь свои точки до и после себя, так что это:
'Sentence 1. Sentence 2.'
Становится так:
'.Sentence 1.. Sentence 2.'
Это регулярное выражение будет генерировать совпадения, подобные этим:
Array (
0 => Array (
0 => '.Next, in 1988 the Bradys were back again for a holiday celebration, "A Very Brady Christmas".',
1 => '. This movie was the highest rated TV-movie of 1988.'
),
1 => Array (
0 => 1988,
1 => 1988
)
)
Затем вы можете легко просмотреть результаты и вставить их в базу данных. Обратите внимание, что в предложениях по-прежнему присутствует предшествующая точка, вам нужно использовать ltrim
, чтобы избавиться от этого.
foreach($sentenceWithYear[0] as $key => $sentence) {
$q = "INSERT INTO
table_name (year, sentence)
VALUES ('".$sentenceWithYear[1][$key]."', '".ltrim($sentence, ". ")."')";
mysql_query($q);
}
Это вызовет такие запросы:
INSERT INTO table_name (year, sentence) VALUES ('1988', 'Next, in 1988 the Bradys were back again for a holiday celebration, "A Very Brady Christmas".')
INSERT INTO table_name (year, sentence) VALUES ('1988', 'This movie was the highest rated TV-movie of 1988.')
Обязательно избегайте ваших запросов.