Регулярное выражение для добавления базового домена в каталог - PullRequest
1 голос
/ 25 июля 2010

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

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

проблема возникает при чтении кэшированных страниц с помощью img src = "thumb / 123.jpg" или src = "/ inc / 123.js".

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

regex что-то вроде: если (src = ") не следует базовый домен, то добавьте базовый домен

Ответы [ 2 ]

2 голосов
/ 25 июля 2010

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

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

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

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

для проверки домена: /www\.example\.com/i должен сделать.

РЕДАКТИРОВАТЬ: Смотрите комментарии:

Для 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);

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

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

Надеюсь, это поможет.

0 голосов
/ 25 июля 2010

Соответствующее регулярное выражение:

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