Может кто подсказать возможный алгоритм решения такой ситуации?
Мой код ниже:
//Исходная строка
$str = "В поле «База данных» необходимо ввести имя базы данных,
в поле «Имя пользователя» ввести имя (логин), которое установлено администратором для конкретного пользователя.
При последующих запусках программы word@net.ru поля «База данных» и «Имя пользователя» будут заполнены.
Более того, пользователь может установить флажки на параметрах
«Сохранять пароль» и «Сохранять имя базы данных».";
$text = array();
//Извлекаем предложения, используя разделители в виде точки и переносов строк
$tok = strtok($str, ".\r\n");
//Заносим каждое предложение в массив (и избавляемся от лишних пробелов)
while($tok)
{
$text[] = trim($tok);
$tok = strtok(".\r\n");
}
echo "<pre>";
print_r($text);
echo "</pre>";
Результат выглядит так, что ни в какие ворота:
Спустя 3 минуты, 2 секунды (19.02.2010 - 15:42) DedMorozzz написал(а):
ммм, а использовать "точку пробел". Ибо предложение заканчивается точкой и после ПРОБЕЛ. В мыле не получиться пробелы расставить.
А точнее - "точка-пробел", "точка-спец знак" и "точка-перевод строки"
А точнее - "точка-пробел", "точка-спец знак" и "точка-перевод строки"
Спустя 4 минуты, 6 секунд (19.02.2010 - 15:46) baston написал(а):
А как это записать в параметре функции? Разве там допустимо несколько таких аргументов?
Спустя 8 минут, 48 секунд (19.02.2010 - 15:55) DedMorozzz написал(а):
Пока что есть идея находить эти символы и заменять на такие же+какой-то уникальный символ. Далее по этому уникальному символу експлойдить и заносить в массив. Работать такое будет точно, но как-то дико по-индусски это... Мб что то получе придумаю)
Спустя 3 минуты, 38 секунд (19.02.2010 - 15:59) baston написал(а):
Да, переносы можно заменить так:
А вот с точкой как быть....
$str = str_replace("\r\n", "", $str);
А вот с точкой как быть....
Спустя 5 минут, 47 секунд (19.02.2010 - 16:05) DedMorozzz написал(а):
не-не-не...не понял меня) Смотри какова идея. Есть текст "«Сохранять пароль» и «Сохранять имя базы данных»."; "
Тут вполне логично, что конец предложения после .";
итого заменяем эти символы на : (.";ћ) , где ћ - спец символ.
Далее делаем експлойд текста по символам "ћ". И все элементы - будет то, что искали. Только проверку смому настроить надо будет. Что бы и точка-кавычка, точка-пробел, точка-кавычка-точка с запятой туда попали...
Таким образом в Массиве будет текст по предложениям и вообще(!) без изменений оригинала.
Тут вполне логично, что конец предложения после .";
итого заменяем эти символы на : (.";ћ) , где ћ - спец символ.
Далее делаем експлойд текста по символам "ћ". И все элементы - будет то, что искали. Только проверку смому настроить надо будет. Что бы и точка-кавычка, точка-пробел, точка-кавычка-точка с запятой туда попали...
Таким образом в Массиве будет текст по предложениям и вообще(!) без изменений оригинала.
Спустя 4 минуты, 6 секунд (19.02.2010 - 16:09) baston написал(а):
Цитата (DedMorozzz @ 19.02.2010 - 16:05) |
Тут вполне логично, что конец предложения после ."; итого заменяем эти символы на : (.";ћ) , где ћ - спец символ. |
Буду думать, спасибо.
Спустя 16 минут, 2 секунды (19.02.2010 - 16:25) baston написал(а):
Тут одна сложность: может так случиться, что после точки начнется новое предложение (без пробела)...
А пока я сделал так:
Но второе предложение слилось с третьим...
P.S. А идея хорошая, сам бы не додумался. Спасибо.
P.P.S. Создам новую тему по принудительной вставке пробела, ибо не соображу.
А пока я сделал так:
$badchar = array(".\"", ". ");
$str = str_replace("\r\n", "", $str);
$str = str_replace($badchar, "ћ", $str);
$text = explode("ћ", $str);</span>
Но второе предложение слилось с третьим...
P.S. А идея хорошая, сам бы не додумался. Спасибо.
P.P.S. Создам новую тему по принудительной вставке пробела, ибо не соображу.