#php #regex
#php #регулярное выражение
Вопрос:
У меня есть таблица стилей, подобная этой:
.d2 {
position:absolute;
background:url(../img/delete.png) no-repeat 0px 1px;
color:#0066CC;
}
.reply {
position:absolute;
background:url(../img/pen.png) no-repeat 0px 1px;
top:5px
}
#about {
position:absolute;
background:url(../img/abc.png);
top:5px
}
Я хочу получить пути к изображениям, которые не имеют атрибута no-repeat. Ожидаемый результат в виде fowllow:
array('../img/pen.png', '../img/delete.png')
Ответ №1:
Этот протестированный код сделает это:
$imgs = array();
$re = '/url(s*['"]?(S*.(?:jpe?g|gif|png))['"]?s*)[^;}]*?no-repeat/i';
if (preg_match_all($re, $text, $matches)) {
$imgs = $matches[1];
}
Ответ №2:
Я бы прочитал файл построчно.
<?php
$image = [];
$lines = file('http://www.example.com/');
// Loop through our array, show HTML source as HTML source; and line numbers too.
foreach ($lines as $line_num => $line) {
if (strpos($line, 'no-repeat') {
if (strpos($line, '.png')) {
$urlpos = strpos($line, 'url');
$rightone = strpos($line, '(', $urlpos);
$leftone = strpos($line, ')', $rightone);
array_push($images, substr($line, $rightone, $leftone - $rightone));
}
}
}
Ответ №3:
Если вы ищете только фон (и они следуют этому порядку параметров (url, repeat, rest)):
preg_match_all('~background:s*url(['"]?([^)] )['"]?)s no-repeat[^;]*;~i', $css, $reg);
print_r($reg[1]);
вывод:
Array
(
[0] => ../img/delete.png
[1] => ../img/pen.png
)