|
|
|
| Здравствуйте. Нужно обработать текст, найти ссылки в тексте и заменить на другие.
Остановился на замене ссылок. Если в тексте встречаются две или более ссылки происходит поочередная замена сначала одной ссылки, потом другой. (То есть str_replace выполняется столько раз, сколько имеется ссылок в тексте.) Код такой
preg_match_all("<a href=\"\.\.\/\d{1,4}.*\">sUi",$full_story, $match);
foreach($match[0] as $url) {
$link="a href=\"/".$row1_id.".html\"";
$str_replace = str_replace($url1,$link,$full_story);
var_dump($str_replace);
}
|
Как сделать корректную замену? | |
|
|
|
|
|
|
|
для: max90
(25.03.2012 в 17:16)
| | А $row1_id откуда берется?
_____
P.S. Напомните мне кто-нибудь что значит "U" в конце РВ
P.P.S. Чет я не понял, тут ограничителями РВ служат < > чтоли? Разве так можно?
P.P.P.S. Если ограничители РВ не слеши, то слеш можно не экранировать. | |
|
|
|
|
|
|
|
для: Sfinks
(26.03.2012 в 09:33)
| | $row1_id внутри цикла, я просто убрал лишний код, чтобы не получилось простыни :)
$row1 = $db->super_query( "SELECT * FROM `table` WHERE `category` LIKE '".$category."' AND `metatitle` LIKE '%".$url."%'
LIMIT 1" );
$row1_id = $row1['id'];
|
_____
1. U (PCRE_UNGREEDY)http://www.pcre.ru/docs/php/text/stdmod
Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные.
2. хм, можно наверное, код работоспособный :) (хотя я всегда использую слеши)
3. Спасибо, буду знать | |
|
|
|
|
|
|
|
для: max90
(26.03.2012 в 10:55)
| | > ..... $row1_id = $row1['id'];
Думаю тогда никак по другому не сделаете. При чем самое плохое в этом коде не многократное str_replace, а многократное $row1 = $db->super_query(....). Можно избавиться от цикла и стр-реплэйс если вместо preg_match() использовать preg_replace_callback(), но внутри функции все-равно будет выборка из бд.
>1. U (PCRE_UNGREEDY)http://www.pcre.ru/docs/php/text/stdmod
>Этот модификатор инвертирует жадность квантификаторов, таким образом они по умолчанию не жадные.
Thanks ) | |
|
|
|
|
|
|
|
для: Sfinks
(26.03.2012 в 11:08)
| | В принципе наверно стоит воспользоваться preg_replace_callback(), т.к. в этом случае функция будет работать только с найденным фрагментом, а не со всем текстом, как str_replace. Это будет покрасивше. Но вот БД... С ним наверное ничего не сделаешь, особенно если количество ссылок в БД не постоянное. | |
|
|
|
|
|
|
|
для: Sfinks
(26.03.2012 в 11:22)
| | Спасибо, буду делать тогда с использованием файлов. | |
|
|
|