Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: substr, аналог
 
 автор: Импекс   (29.06.2010 в 16:50)   письмо автору
 
 

Подскажите функцию типа substr, только чтобы обрезала не по буквам, а по пробелам, например:

substr("слово1, слово2", 1, 3); // должно возвращать слово1,. Т.е. резать по любому из раделителей

можно как то вот так
$len = (strpos("слово1, слово2", " ") && strpos("слово1, слово2", " ") < 3)?(strpos("слово1, слово2", " ") :3; substr("слово1, слово2", 0, $len);


только вместо пробела должен стоять любой разделитель

  Ответить  
 
 автор: sim5   (29.06.2010 в 17:01)   письмо автору
 
   для: Импекс   (29.06.2010 в 16:50)
 

Если вам надо вернуть слово1, то зачем вам разделитель?

  Ответить  
 
 автор: Импекс   (29.06.2010 в 17:20)   письмо автору
 
   для: sim5   (29.06.2010 в 17:01)
 

текст может быть и таким "должно возвращать слово1,. Т.е. резать по любому из раделителей"

постоянная одна константа это длина, и нужно обрезать строку по длине, но не жестко, а по разделителю

как то вот так, только еще не доделал ), доделаю позже, . Затем показываю, чтобы было понятней, что хочу сделать
if ($max_len_line > 126) //  происходит обрезание названия
{
    // Просматриваем строку справа налево
    for ($i = $max_len_line; $i>0; $i--)
    {
        // Часть строки имени 
        $line_patch = substr($name, 0, $i);
        echo $line_patch.'<br>';
        $patern = '#\W#i';
        // Это буква
        if (preg_match($patern, $line_patch)) 
        {
            // Слудующая буква это раделитель
            if (1)  
            {
                //break;                
            }
        }
        //else режем по длине

    }
}

  Ответить  
 
 автор: sim5   (29.06.2010 в 17:32)   письмо автору
 
   для: Импекс   (29.06.2010 в 17:20)
 

Если из текста "должно возвращать слово1,. Т.е. резать по любому из раделителей" должно возвращаться "слово1", то и резать ничего не надо, просто echo "слово1".
Если нужно, например, от начала строки "должно возвращать слово1,. Т.е. резать по любому из раделителей" вернуть все, включая "слово1", то нет пробем найти начальную позицию, и зная длину слова1 получить нужное.
Если нужно резать от начала строки на N символов, не обрезая последнее слово, то зная смещение N, найти первый после него пробел, и проверить символ этой позиции минус 1.

  Ответить  
 
 автор: Импекс   (30.06.2010 в 08:40)   письмо автору
 
   для: sim5   (29.06.2010 в 17:32)
 

Если нужно резать от начала строки на N символов, не обрезая последнее слово, то зная смещение N, найти первый после него пробел, и проверить символ этой позиции минус 1. Да Да

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

  Ответить  
 
 автор: sim5   (30.06.2010 в 09:33)   письмо автору
 
   для: Импекс   (30.06.2010 в 08:40)
 

Вы можете пример привести о разделителях? Что значит любой:
слово слово
слово@слово
...
и т.п., так что-ли?

  Ответить  
 
 автор: Импекс   (30.06.2010 в 09:37)   письмо автору
 
   для: sim5   (30.06.2010 в 09:33)
 

да, все верно, еще пример !"№;%%;:?%*?:** ?(),/,._

  Ответить  
 
 автор: sim5   (30.06.2010 в 10:03)   письмо автору
 
   для: Импекс   (30.06.2010 в 09:37)
 

Тогда это просто ужас. Что это за билиберда, это осмысленный текст или мусор? Коли мусор, то рег. выражения.

  Ответить  
 
 автор: Trianon   (30.06.2010 в 10:15)   письмо автору
 
   для: sim5   (30.06.2010 в 10:03)
 

коли мусор - тогда в корзину.

  Ответить  
 
 автор: sim5   (30.06.2010 в 10:27)   письмо автору
 
   для: Trianon   (30.06.2010 в 10:15)
 

:)
Я вот и думаю, чего и главное из чего хотят выудить.

  Ответить  
 
 автор: Импекс   (30.06.2010 в 10:33)   письмо автору
 
   для: sim5   (30.06.2010 в 10:27)
 

да нет, это ("№;%%;:?%*?:** ?(),/,._) не текст, это пример разделителей)))))

  Ответить  
 
 автор: sim5   (30.06.2010 в 10:37)   письмо автору
 
   для: Импекс   (30.06.2010 в 10:33)
 

Коли текст формируется разумно, то и разделитель не абы какой попало в разных местах, а один и тот же. И если так, то делать так как я говорил выше, только искать не пробел, а этот самый разделитель.

  Ответить  
 
 автор: Импекс   (30.06.2010 в 10:49)   письмо автору
 
   для: sim5   (30.06.2010 в 10:37)
 

есть обычный текст, самый что ни на есть. Ну из художественной книги например, а там встречаются, кроме пробело запятые, точки, восклицательные знаки. Есть ли функция, которая бы ловила любой разделитель. Можно сделать конечно регуляркой, но это нагружает больше, чем стандартными функциями

  Ответить  
 
 автор: sim5   (30.06.2010 в 10:59)   письмо автору
 
   для: Импекс   (30.06.2010 в 10:49)
 

А согласны, что текст из книги никак не будет содержать ту ерунду, которую вы написали, другими словами это будет текст с пробелами. Из этого следует:
1. Нужно от начала строки (или смещения) извлечь N символов.
2. Узнаем что за символ на позиции N, если это не пробел, то это слово.
3. Ищем первый пробел, начиная со смещения N, и забираем эту часть строки.
4. Удаляем из этой строки все символы, которые не удовлетворяют условию, например, точка, восклицательный и вопросительный знаки, это признак конца предложения, их оставить, остальное удалить.
4. Получаем строку от начальной позиции до N, добавляя к ней строку от N до пробела с удаленными нежелательными знаками.

  Ответить  
 
 автор: Trianon   (30.06.2010 в 10:40)   письмо автору
 
   для: Импекс   (30.06.2010 в 10:33)
 

чьим бы примером это ни было - это хреновый пример.
Пример ситуацию прояснять должен, а не запутывать.

  Ответить  
 
 автор: Импекс   (30.06.2010 в 10:47)   письмо автору
 
   для: Trianon   (30.06.2010 в 10:40)
 

согласен.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования