доработка регулярного выражения preg_replace:)

eval

Новичок
PHP:
<?
$regExp = "(.*?)"; // текст который идет между тегами <em> или <i>
echo preg_replace("#<a(.*?)href=\"(.*?)\"(.*?)img(.*?)<strong>(.*?)<\/strong>(.*?)<(em|i)>".$regExp."<\/(em|i)(.*?)\/p>#si",
		"<a href=\"".$url."\"\\3img\\4<a href=\"".$url."\" target=\"_self\"><strong>\\5</strong></a>\\6<\\7>\\8</\\9\\10/p>\n<p><a href=\"".$url."\" target=\"_self\">Подробнее...</a></p><br /><br />\n\n",
		$value['introtext'])."<br /><br />";
?>
доброго времени суток)) подскажите люди добрые как дописать шаблон для preg_replace
в общем в строке текст который содержится между тегами em или i и это содержимое я считывал в переменой
PHP:
$regExp = "(.*?)";
, возникла задача обрезать текст на определённое количество повторений шаблона
я пытался так
PHP:
$regExp = "([\w]{9})";
и так
PHP:
$regExp = "([А-я]{9})";
. но ничего не получилось, подскажите в чем дело
 

AmdY

Пью пиво
Команда форума
eval
а кто тебе предыдущую регулярку писал?
>".$regExp."< + $regExp = "([\w]{9})"; получаем >([\w]{9})< (тоесть твоя регулярка будет работать только если в теге РОВНО 9-ть символов)

тебе нужно сделать это правило не обязательным для варианта когда меньше 9-ти и добавить необязательную возможность любых символов на случай когда больше
 

eval

Новичок
сам писал и так как этот момент не понятен, решил обратиться к гуру )))
там может быть сколько угодно символов, мне надо обрезать текст, я с начала думал по пробелам но не получается, подскажите как можно всё это реализовать, дописав регулярку...

другие методы в данной ситуации не учитываются

вот натолкнул меня на мысль и попробовал

PHP:
$regExp = "([\w]{0,10});
но опять провал...

да, забыл упамянуть что это всё происходит в цикле и все неудачные шаблоны почему то нагружают сервер ((

можно пример для этого действия:
не обязательным для варианта когда меньше 9-ти
 

freeek

Новичок
Конечно, можно помочь, но лично я, к примеру, не могу никак сообразить, что нужно?

Заметить в каком то тексте содержимое тегов em,i не больше определённого кол-ва раз?
 

AmdY

Пью пиво
Команда форума
PHP:
$regExp = "([\w]{0,10});
ну вот, у тебя теперь берётся первые символы количеством от 0 до 10, осталось лишь добавить правило чтобы можно было больше
например, ([\w]{0,10})\w*


а притормаживание из-за обилия необязательных масок, расширение пытается перебрать все возможные варианты. делать разбор html-xml с помощью регулярок - глупость, долго, много багов и очень сложно, лучше это делать через DOM
 

eval

Новичок
freeek
задача была учесть обрезку символов в тексте который между em или i до определённого количества символов в моем случае это 450... при этом прикрепить обратно закрывающий тег и добавить после него ссылку, я думаю глянуть по реге и так видно генерацию результата...
AmdY
спасибо за идею про DOM ) не вникал ещё в php-шный))) кстати шаблон ([\w]{0,10})\w* в моем случае выдал ошибку... решение было в добавлении ещё одной реги...
 
Сверху