2010-07-25 1 views
1

10 сайтов необходимо кэшировать. Когда кеширование: фотографии, css, js и т. Д. Отображаются неправильно, потому что базовый домен не подключен к каталогу. Мне нужно регулярное выражение, чтобы добавить базовый домен в каталог. Приведенные ниже примерыРегулярное выражение для добавления базового домена в каталог

базового домена: http://www.example.com

проблема возникает при чтении кэшированных страниц с IMG SRC = "палец/123.jpg" или SRC = "/ вкл/123.js".

они будут отображаться правильно, если это было img src = "http://www.example.com/thumb/123.jpg" или src = "http://www.example.com/inc/123.js ».

регулярное выражение что-то вроде: если (SRC = ") не следует базовой области, то добавление в базу домен

+1

Там нет никакого способа, чтобы построить регулярное выражение, которое будет работать. Другие теги могут иметь 'SRC =' атрибутов и строка может также появиться в CDATA другое содержимое страницы. Регулярные выражения не может разобрать HTML или XML или XHTML. Анализ парсеров, регулярных выражений нет. Используйте 'wget' или что-то, что на самом деле знает, как переводить ссылки. – msw

ответ

0

Matching регулярное выражение:

(?:src|href)="(http://www\.example\.com/)?.+
+0

Не могу заставить это работать. Я попробовал strDomain = http: //www.example .com и RegEx.Pattern = "(?: src | href) = CHR (34) (strDomain) ?.+ ", и когда я попробовал strHTMLCode = RegEx.Replace (strHTMLCode), я получил ошибку – Patriotec

+0

, это не заменяет, просто совпадает. Если есть метод RegEx.Match(), это должно возвращать true для всех тэгов src или href в любой документ xhtml. – Tim

+0

Хорошо, я решил проблему, используя базовый тег ссылки. w3schools.com: http://www.w3schools.com/tags/tag_base.asp. Спасибо всем за помощь – Patriotec

2

, не зная языка, вы можете использовать (возможно, самый портативный) заменить модификатор:

s/^(src=")([^"]+")$/$1www\.example\.com\/$2/

Это необходимо сделать следующее: 1 Строка 'src = "' (и захватить ее в переменной $ 1) 2. один или несколько символов без двойных кавычек ("), за которыми следует "(и захватить его в переменной $ 2) 3. Запасные материалы www.example .com/'между двумя группами захвата.

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

, чтобы проверить домен: /www\.example\.com/i должен делать.

EDIT: Смотрите комментарии:

Для PHP, я хотел бы сделать это немного по-другому. Я бы, вероятно, использовал simplexml. Я не думаю, что будет переводить хорошо, хотя, так вот регулярное выражение один ...

$html = file_get_contents('/path/to/file.html'); 
$regex_match = '/(src="|href=")[^(?:www.example.com\/)]([^"]+")/gi'; 
$regex_substitute = '$1www.example.com/$2'; 
preg_replace($regex_match, $regex_substitute, $html); 

Примечание: На самом деле я не запускать это отладить его, это просто экспромтом. Я был бы обеспокоен тремя вещами. во-первых, я не уверен, как preg_replace будет обрабатывать символ /. Я не думаю, что вы беспокоитесь об этом, если только у VB нет аналогичной проблемы. Во-вторых, если есть вероятность, что разрыв строки будет мешать, я могу изменить регулярное выражение. В-третьих, я добавил бит [^(?:www\.example\.com)]. Это должно изменить соответствие любому src или href, что не имеет www.example.com/ там, но это зависит от типа используемого регулярного выражения (POSIX/PCRE).

Остальные изменения должны быть точными (я добавил href = ", а также сделал его нечувствительным к регистру (\ i), и есть требование сделать его глобальным (\ g) в противном случае, он будет просто совпадать один раз).

Я надеюсь, что помогает.

+0

Как бы это настроить, чтобы он изменил все html сразу. using vbscript для этого (не спрашивайте) strHTML = все кэшированные Код HTML strDomain = доменное имя Set RegEx = новый RegExp RegEx.Pattern = "s/^ (src =") ([^ "] +") $/$ 1strDom айн \/$ 2 /» RegEx.Multiline = True RegEx.Global = True newstrHTML = RegEx.Replace (strHTML) Как я настроить регулярное выражение в VBScript просто заменить домен, если его нет в каталоге , Я не очень хорошо разбираюсь в регулярном выражении. TIA – Patriotec

+0

Буду честным, я никогда не использовал vb. Кроме того, у меня возникают проблемы с «просмотром» кода, можете ли вы изменить свой вопрос с помощью блока кода, чтобы увидеть его лучше? Еще одна вещь, я бы добавил конечную/к переменной strDomain (если я правильно ее читаю). Тогда у вас не будет никаких странных потребностей. – Tim

+0

Я думаю, мы не можем использовать разрывы строк в разделе комментариев. Я выложу простой текстовый файл на своем веб-сайте, чтобы вы могли видеть, что я говорю «http://www.genxts.com/regex.txt – Patriotec

 Смежные вопросы

  • Нет связанных вопросов^_^