Доброго времени суток уважаемые форумчане!Прошу помочь с оптимизацией процесса замены во всех ссылках href содержимого.
Задачи следующие:
1) Заменить все "внешние" ссылки в HTML документе (те что начинаются с 'http:')
2) Заменить все "../../" на "/pathone/pathtwo/";Написал код, код рабочий, но если попадается HTML документ в котором несколько тысяч ссылок, сервер мягко выражаясь начинает кашлять :)
Мысли, ограничить список полученный из preg_match_all, только теми ссылками которые начинаются на 'http:' или '../../' или '../'
Попытки допилить регулярку до данного условия, не увенчались успехом, в чем и прошу помочь.Заранее благодарен
[php]
$matches = '';
$pattern = '/<a[^>]*href=\"?([^\s\">]+?)\"?[^>]*>/ismU';
$retval = preg_match_all($pattern, $content, $matches);
if (is_array($matches[1]) ) {
foreach ($matches[1] as $href) {
$content = str_replace("../../", "/pathone/pathtwo/", $content);
if ( strpos($href, 'http://')) {
$content = str_replace($href, '#', $content);
}
}
}
[/php]
> но если попадается HTML документ в котором несколько тысяч ссылок,
> сервер мягко выражаясь начинает кашлять :)ПХП - гавно :)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>const char href[] = "href=\"";
const char from[] = "opennet";
const char to[] = "linux.org";int main(void)
{
char buffer[BUFSIZ] = {0};
char *buff_p, *find_p;
size_t find_sz = strlen(from);
while (fgets(buffer, BUFSIZ, stdin)) {
buff_p = buffer;
while ((find_p = strstr(buff_p, href))) {
while ((find_p = strstr(buff_p, from))) {
while (buff_p < find_p)
fputc((int)*buff_p++, stdout);
buff_p += find_sz;
fputs(to, stdout);
}
}
fputs(buff_p, stdout);
}
fclose(stdin);
fclose(stdout);
return(0);
}
>[оверквотинг удален]
> fputs(to, stdout);
> }
> }
> fputs(buff_p, stdout);
> }
> fclose(stdin);
> fclose(stdout);
> return(0);
> }
>
При всем уважении к вашей карме, ваш оффтоп (в данном контексте) с подобными оскорблениями в адрес сообщества php программистов, говно.
http://stackoverflow.com/questions/1732348/regex-match-open-...
http://www.codinghorror.com/blog/2009/11/parsing-html-the-ct...
> http://stackoverflow.com/questions/1732348/regex-match-open-...
> http://www.codinghorror.com/blog/2009/11/parsing-html-the-ct...Большое спасибо, первый линк вполне помог, второй был лишним ибо я не настолько силен в ang )