Ответов: 4 Просмотров: 116
|
Цитата:У имейла вид постоянный всегда, а у ваших предложений с сюрпризом может быть что угодно.
вообще, предложение оно как бы тоже соответствует определенным требованиям, думал, может это классическая задача (выделить предложения) - оказалось нет...
Цитата:Во вторых вы не ответили зачем и действительно ли вам нужно выделять предложения.
да, извините, не ответил: действительно нужно, задачу задали - выделить из текста предложения. Под предложениями я понимаю конструкции, удовлетворяющие обычным орфографичесим\синтаксическим (человеческим ) требованиям к предложениям: начинается с большой буквы, заканчивается знаком препинания+[пробел или конец строки], может содержать "сюрпризы" типа .net, моб. или ул. и т п. Вот.
Сорри, у вас длина ссобщения 2кб максимум, сейчас 3 мессага сделаю
(Добавление)
Пока сделал так:
PHP:
скопировать код в буфер обмена
<?PHP $text = ' Это нормальный текст Регулярные выражения пришли к нам из Unix и Perl. В PHP существует два различных механизма для обработки регулярных выражений: POSIX-совместимые и Perl-совместимые. Их синтаксис во многом похож, однако Perl-совместимые регулярные выражения более мощные и, к тому же, работают намного быстрее (в некоторых случаях до 10 раз быстрее). Круто, не правда ли!? А дальше идут куски текста с сюрпризами Бла-бла-бла .net блаб-бла-бла . Бла-бла бла т.е. не совсем бла-бла. Версия 5.2 выйдет! Куда она денется! Адрес: ул. Цурюпы, д. 12, кв.15, Нижний Тагил, моб. +1231234567. Всё. '; // это чтобы выделить заголовки в тексте как предложения (чтобы заголовки // попадали под мой рег.выр. надо поставить точку с пробелом после них) // omg! кодирую текст, чтобы исключить сокращения с точками, чтобы позже работало рег.выр. "т.к.", "т. к.", "т.е.", "т. е.", "г.", "ул.", "кв.", "д.", "тел.", "моб.", "дом." ); "{[$%#tk1]}", "{[$%#tk2]}", "{[$%#te1]}", "{[$%#te2]}", "{[$%#g]}", "{[$%#ul]}", "{[$%#kv]}", "{[$%#d]}", "{[$%#tel]}", "{[$%#mob]}", "{[$%#dom]}" ); // чтобы рег.выр.-у соответстовали первое и последнее предложение в тексте $text = ' '.$text.' '; // сам рег.выр. $reg = '/([A-ZА-Я]+.+)[.!?]+[\s]+/sU'; // это массив с предложениями, без знака препинания вконце, но ниче $strings = $strings[1]; // декодируем предложения в нормальный вид foreach($strings as $i => $string) $strings[$i] = str_replace($replace, $search, $string); ?>
(Добавление)
по-моему извращенски, плюс почему-то str_ireplace в моем php5 не работает , но ничего...
Единственное - предложения возвращаются без конечных символов, по условию не оговорено, нужны ли они, но...
В общем пока это - самое толковое, что я придумал.
Скрипт возвращает
Цитата:
array(12) {
[0]=>
string(20) "Это нормальный текст"
[1]=>
string(48) "Регулярные выражения пришли к нам из Unix и Perl"
[2]=>
string(113) "В PHP существует два различных механизма для обработки регулярных выражений: POSIX-совместимые и Perl-совместимые"
[3]=>
string(166) "Их синтаксис во многом похож, однако Perl-совместимые регулярные выражения более мощные и, к тому же, работают намного быстрее (в некоторых случаях до 10 раз быстрее)"
[4]=>
string(19) "Круто, не правда ли"
[5]=>
string(40) "А дальше идут куски текста с сюрпризами "
[6]=>
string(30) "Бла-бла-бла .net блаб-бла-бла "
[7]=>
string(34) "Бла-бла бла т.е. не совсем бла-бла"
[8]=>
string(17) "Версия 5.2 выйдет"
[9]=>
string(16) "Куда она денется"
[10]=>
string(63) "Адрес: ул. Цурюпы, д. 12, кв.15, Нижний Тагил, моб. +1231234567"
[11]=>
string(3) "Всё"
}
Может что подскажете, чтоб лучше было ?
(Добавление)
мм, три мессага прикольно склеились в один - тогда извиняюсь за один большой мессаг |