2012-06-28 1 views
-2

Я пытаюсь сопоставить все атрибуты src, которые начинаются с http.Соответствующие атрибуты Src, которые не начинаются с HTTP

+4

О чем вы говорите? Пожалуйста, покажите код. – simbabque

+0

Возможный дубликат [Как я могу выборочно изменять атрибуты src тегов скриптов в HTML-документе с помощью Perl?] (Http://stackoverflow.com/questions/11252314/how-can-i-selectively-modify-the-src -attributes-of-script-tags-in-a-html-docume) –

ответ

2

Это не оператор «не». Это символ «начала строки».

Нечто вроде s!^(?!http)/?!$PATH_BLAH/! может быть тем, что вы ищете.

+0

+1: хороший вызов, чтобы решить вопрос. – Borodin

+0

В связи с этим, что решение daxim должно обрабатывать, это относительные пути протокола. Например, если у меня есть '', то если страница была отправлена ​​через http, то абсолютный URL должен стать 'http: // images.example.com/foo.png'. Тот же файл, который был передан через https, приведет к 'https: // images.example.com/foo.png'. Это может быть абсурдно полезно, если вы предварительно генерируете в основном статический HTML-код, который должен обслуживаться как не зарегистрированным пользователям (http), так и зарегистрированным пользователям (https для защиты файлов cookie). –

2

Вы хотите разрешить URI для абсолютных URI. Использование надежного анализатора HTML:

use strictures; 
use URI qw(); 
use Web::Query 'wq'; 

my $PATH_BLAH = 'http://example.com/blah/'; 
my $html = <<'HTML'; 
<html><head></head><body> 
<img src="../relative-link" /> 
<img src="yup/another/one" /> 
<img src="/oh/I/start/with/a/slash" /> 
<img src="http://example.net/absolute-link" /> 
</body></html> 
HTML 

my $w = wq $html; 
$w->find('*[src]')->each(sub { 
    my (undef, $e) = @_; 
    $e->attr('src', URI->new_abs($e->attr('src'), $PATH_BLAH)); 
}); 
print $w->html; 

__END__ 
<html><head></head><body> 
<img src="http://example.com/relative-link" /> 
<img src="http://example.com/blah/yup/another/one" /> 
<img src="http://example.com/blah/oh/I/start/with/a/slash" /> 
<img src="http://example.net/absolute-link" /> 
</body></html> 
0

Это не Perl. Я предполагаю, что это регулярное выражение? И я предполагаю, что вы пытаетесь совместить символы, которые не включают «http»? Если да, то вы хотите

(?:(?!http).)* 

(?:(?!STRING).) является (?:STRING) в [^CHAR] является CHAR.

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