14.04.2009, 15:45 | #1 | |
Специалист
|
замещение регулярного выражения - альтернатива
CMS Seditio, функция sed_bbcode. Там есть несколько циклов
Код:
foreach($bbcodes as $bbcode => $bbcodehtml) { $text = eregi_replace($bbcode,$bbcodehtml,$text); } Попробовал поставить str_replace - побила img и некоторые другие(самописные?) коды. Вот полный код функции: Код:
function sed_bbcode($text) { global $L, $skin, $sys, $cfg, $sed_groups; $text = sed_bbcode_autourls($text); $text = " ".$text; $bbcodes = array( '$' => '$', '' => '<strong>', '' => '</strong>', '[p]' => '<p>', '[/p]' => '</p>', '' => '<u>', '' => '</u>', '' => '<em>', '' => '</em>', '[hr]' => '<hr />', '[_]' => ' ', '[__]' => ' ', '
Цитата:
__________________
|
|
14.04.2009, 16:22 | #2 | |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 278
|
Делайте preg_replace, синтаксис у них очень близок, а производительность в разы выше. Об этом аже в официальном мануале написано.
Добавлено через 2 минуты Точней в мануале написано мол preg_replace немного лучше Цитата:
обычно рега из eregi преобразуется в "/...старое рег выражение/i" - где свич i в конце показывает регисьронезависимый поиск.
__________________
If it's not great, it's not the end. Последний раз редактировалось Alexey; 14.04.2009 в 16:22. Причина: Добавлено сообщение |
|
14.04.2009, 16:59 | #3 | |
Специалист
|
Цитата:
__________________
|
|
14.04.2009, 17:17 | #4 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 278
|
preg_replace - ?более чем стандартная функция.
Придется заменить eregi_replace($bbcode,$bbcodehtml,$text); на чтонибудь в роде preg_replace("/".$bbcode."/i",$bbcodehtml,$text); См документацию
__________________
If it's not great, it's not the end. |
14.04.2009, 17:32 | #5 |
Специалист
|
Не, я имею ввиду преобразовать регулярки из PCRE в POSIX, прежде чем использовать preg_replace/ Либо правильно заэскейпить bbcode
__________________
|
14.04.2009, 17:43 | #6 |
Мне повезёт!
Регистрация: 05.05.2007
Сообщений: 1,076
Вес репутации: 278
|
preg_replace использует PCRE. Так что может наоборот?
А преобразовывать... Они очень похожи, пройдитесь по файлику, поправьте различия... Это конечно нудно, но вы же хотели производительность:P
__________________
If it's not great, it's not the end. |
14.04.2009, 18:18 | #7 |
Специалист
|
пройтись по файлику,это называется, "мы не ищем легких путей". Это как вместо for написать 20 раз одно и тоже. Это не мой метод.
__________________
|
14.04.2009, 20:29 | #8 | ||
Вредина
Регистрация: 03.07.2007
Адрес: д.Коноплянка
Сообщений: 3,535
Вес репутации: 434
|
Не знаю как там с производительностью, но код приведенный выше мудрен как фиг знает чего. Я так понял (глубоко не вникая) это резалка bb. Юзаю ниже приведенную ф-ию на проектах до 80.000 уников в день, и в ус не дую. Написана лет 5 назад с использованием preg_replace, т.е. foreach совсем не нужен. ))
Фрагмен: Цитата:
Цитата:
__________________
|
||
14.04.2009, 20:54 | #9 |
Специалист
|
Jooz, код мудрен это да. И еще не оптимизирован,как минимум.Функция супер. Но под нее тож надо регулярки(точнее левую часть) мои перевести как-то...
__________________
|
16.04.2009, 11:43 | #10 |
Специалист
|
Пошел другим путем. Регулярки преобразовывать не стал, просто часть из них выкинул. В итоге общая нагрузка упала с 6.8 до 1.2 сек. Мониторил Zend Studio. Но 1.2 сек все равно наверное много.
__________________
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Альтернатива page-navi | sergsam1 | Вопросы по работе системы | 3 | 21.12.2008 17:23 |
Аукцион или конкурс на замещение ссылки | Dr. Andy | Пожелания пользователей системы | 6 | 01.02.2008 12:05 |
Часовой пояс GMT +3, время: 00:36.