The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Оптимизация регулярного выражения"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (PHP)
Изначальное сообщение [ Отслеживать ]

"Оптимизация регулярного выражения"  +/
Сообщение от svfolder email(ok) on 10-Дек-12, 19:51 
Доброго времени суток уважаемые форумчане!

Прошу помочь с оптимизацией процесса замены во всех ссылках 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]

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Оптимизация регулярного выражения"  –1 +/
Сообщение от pavlinux (ok) on 11-Дек-12, 02:13 
> но если попадается 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);
}


Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

4. "Оптимизация регулярного выражения"  +/
Сообщение от svfolder email(ok) on 11-Дек-12, 22:51 
>[оверквотинг удален]
>      fputs(to, stdout);
>    }
>   }
>    fputs(buff_p, stdout);
>  }
>  fclose(stdin);
>  fclose(stdout);
>  return(0);
> }
>

При всем уважении к вашей карме, ваш оффтоп (в данном контексте) с подобными оскорблениями в адрес сообщества php программистов, говно.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

2. "Оптимизация регулярного выражения"  +/
Сообщение от name (??) on 11-Дек-12, 18:07 
http://stackoverflow.com/questions/1732348/regex-match-open-...
http://www.codinghorror.com/blog/2009/11/parsing-html-the-ct...
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Оптимизация регулярного выражения"  +/
Сообщение от svfolder email(ok) on 11-Дек-12, 22:46 
> http://stackoverflow.com/questions/1732348/regex-match-open-...
> http://www.codinghorror.com/blog/2009/11/parsing-html-the-ct...

Большое спасибо, первый линк вполне помог, второй был лишним ибо я не настолько силен в ang )

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру