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?
----- Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
Champion
Отправлено: 30 Мая, 2010 - 08:46:17
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Очень сомневаюсь, что вариант с массивом лучше регулярки. bt_corp у тебя в preg_relace таинственное //1 надо заменить на \1 или \\1 - если двойные кавычки. И [cut] взять в скобки. Или еще проще - вместо \1 написать [cut] - ты ведь и так знаешь, что там.
garvey
Отправлено: 30 Мая, 2010 - 09:11:45
Частый посетитель
Покинул форум
Сообщений всего: 528
Дата рег-ции: Май 2010 Откуда: Minsk
Помог: 3 раз(а)
В таких небольших задачах лучше использовать встроенные функции php. Регулярные выражения работают медленней. Лучше несколько раз сделать substr, strpos, чем написать одно регулярное выражение.
Обрезаем от подстроки, находящейся в середине до конца
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 получается быстрее, потому что приходится всего один раз пройти по строке, пусть и более медленным способом.
alexspb
Отправлено: 30 Мая, 2010 - 09:58:05
Посетитель
Покинул форум
Сообщений всего: 260
Дата рег-ции: Май 2010
Помог: 0 раз(а)
garvey пишет:
В таких небольших задачах лучше использовать встроенные функции php. Регулярные выражения работают медленней. Лучше несколько раз сделать substr, strpos, чем написать одно регулярное выражение.
1) Champion уже написал, что вызов нескольких функций может быть не лучше вызова одной регулярки
2) время разработки - во многих случаях проще (быстрее) написать регулярку
3) читаться такая конструкция тоже может проще (Добавление)
Всем очень благодарен за помощь. Реализовал все работает.
----- Программист, это - такой человек, который сначала много думает, чтобы потом ничего не делать!
JustUserR
Отправлено: 30 Мая, 2010 - 14:17:24
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
bt_corp Кстати если текст передаваемый в данное регулярное выражение является многострочным то есть содержит символ перевода строки то имеется один интересный момент - действительно модификатор /s позволяет соответствовать спецсимволу точке и символу новой строки - но вот спецсимвол $ может рассматриваться именно как конец строки по символу новой строки а так как регулярное выражение стремится соответствовать целиком то может удалиться только одна строчка - а таком случае нужно $ заменить на \Z
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.