Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как обрезать текст с помощью RegExps?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Помогите!!!
bt_corp
Отправлено: 29 Мая, 2010 - 20:24:16
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Задача состоит в том, чтобы сократить текст с помощью тега [cut] он должен обрезать текст от места где он проставлен и до конца. Помогите пожалуйста. Растерялся

(Отредактировано автором: 29 Мая, 2010 - 20:26:38)



-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
alexspb
Отправлено: 29 Мая, 2010 - 20:38:48
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




регулярка может быть такой
/\[cut\].*$/

(Отредактировано автором: 29 Мая, 2010 - 20:41:53)



-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
bt_corp
Отправлено: 29 Мая, 2010 - 22:27:15
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




alexspb пишет:
регулярка может быть такой
/\[cut\].*$/


CODE (htmlphp):
скопировать код в буфер обмена
  1. $s = preg_replace("/\[cut\].*$/","//1", $s);


Не работает. Огорчение


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
movEAX
Отправлено: 29 Мая, 2010 - 23:24:33
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 750
Дата рег-ции: Авг. 2009  


Помог: 16 раз(а)




Если Вы в точности описали желаемое, то регулярки Вам не нужны:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $txt =
  3. 'test text test text test text test text test text test text
  4. test text test text test text test text test text test text[cut]
  5. test text2 test text2 test text2 test text2 test text2 test
  6. text2 test text2 test text2 test text2 test text2 test text2';
  7.  
  8. $result = substr($txt, strpos($txt,'[cut]')+5); // вариант 1
  9. $result = array_pop(explode('[cut]',$txt)); // вариант 2


-----
армия.. самое убогое место
 
 Top
bt_corp
Отправлено: 30 Мая, 2010 - 03:24:36
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




Этот вариант решения проблемы очень подходит. Радость Очень благодарен. Но есть одна проблема, мне нужно чтобы текст обрезался наоборот.

Вот так:

(Отредактировано автором: 30 Мая, 2010 - 03:27:37)



-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
Champion Супермодератор
Отправлено: 30 Мая, 2010 - 08:46:17
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




Очень сомневаюсь, что вариант с массивом лучше регулярки.
bt_corp у тебя в preg_relace таинственное //1 надо заменить на \1 или \\1 - если двойные кавычки. И [cut] взять в скобки. Или еще проще - вместо \1 написать [cut] - ты ведь и так знаешь, что там.
 
 Top
garvey
Отправлено: 30 Мая, 2010 - 09:11:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010  
Откуда: Minsk


Помог: 3 раз(а)




В таких небольших задачах лучше использовать встроенные функции php. Регулярные выражения работают медленней. Лучше несколько раз сделать substr, strpos, чем написать одно регулярное выражение.
 
 Top
Champion Супермодератор
Отправлено: 30 Мая, 2010 - 09:41:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


Помог: 57 раз(а)




garvey совсем не обязательно.... Ща потестим
(Добавление)
Спойлер (Отобразить)

Цитата:
Обрезаем от подстроки, находящейся в середине до конца
0.061355829238892 - substr+stripos
0.048592018127441 - pcre
Обрезаем от подстроки, находящейся в начале до конца
0.062087059020996 - substr+stripos
0.048382925033569 - pcre
Обрезаем от подстроки, находящейся в конце до конца. Т.е. ничего не обрезаем
0.0624840259552 - substr+stripos
0.049360918045044 - pcre
Оставляемкусок из середины. А вырезать посложнее будет
0.18238592147827 - substr+stripos
0.11474704742432 - pcre
Получается, лишний вызов stripos - дорогое удовольствие. А еще по-хорошему, надо проверять, если stripos вернет false. Это может расцениться как 0 и вся строка порежется.

Использовать 1 preg_match вместо 1 strpos для нахождения простой подстроки - это неправильно. А вот тут уже вот использование preg_replace получается быстрее, потому что приходится всего один раз пройти по строке, пусть и более медленным способом.
 
 Top
alexspb
Отправлено: 30 Мая, 2010 - 09:58:05
Post Id


Посетитель


Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




garvey пишет:
В таких небольших задачах лучше использовать встроенные функции php. Регулярные выражения работают медленней. Лучше несколько раз сделать substr, strpos, чем написать одно регулярное выражение.

1) Champion уже написал, что вызов нескольких функций может быть не лучше вызова одной регулярки
2) время разработки - во многих случаях проще (быстрее) написать регулярку
3) читаться такая конструкция тоже может проще
(Добавление)
bt_corp пишет:
Не работает.

модификаторы нужны были еще


-----
Хостинг - неограниченно доменов на одну папку
Ajax - отличное введение
 
 Top
bt_corp
Отправлено: 30 Мая, 2010 - 11:23:46
Post Id



Гость


Покинул форум
Сообщений всего: 71
Дата рег-ции: Май 2010  


Помог: 0 раз(а)




alexspb пишет:


Всем очень благодарен за помощь. Реализовал все работает. Радость


-----
Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
 
 Top
JustUserR
Отправлено: 30 Мая, 2010 - 14:17:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




bt_corp Кстати если текст передаваемый в данное регулярное выражение является многострочным то есть содержит символ перевода строки то имеется один интересный момент - действительно модификатор /s позволяет соответствовать спецсимволу точке и символу новой строки - но вот спецсимвол $ может рассматриваться именно как конец строки по символу новой строки а так как регулярное выражение стремится соответствовать целиком то может удалиться только одна строчка - а таком случае нужно $ заменить на \Z


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB