Вытащить кусочек из файла. Наверное через регулярные выражения?

lantastic

Новичок
Вытащить кусочек из файла. Наверное через регулярные выражения?

Привет!

Есть файл styles.css, где есть перечисление CSS-стилей, например

.jan { background: #000000; }
.feb { background: #FF00FF; }
.mar { background: #EE0000; }

Как мне вытащить из файла значения цветов по названию стилей? Чувствую, что через регулярные выражения, но сам разобраться не могу... Помогите, пожалуйста :)
 

_RVK_

Новичок
1. что именно у тебя не получается?
2. файл имеет только тот формат что ты привел?
 

Mephistophel

Новичок
я, конечно, благотворительностью обычно не занимаюсь, но вот:

PHP:
<?
$text='
.jan { background: #000000; }
.feb { background: #FF00FF; }
.mar { background: #EE0000; }
';

preg_match_all("/\.(\S{3})\s*\{\s*background:\s*(#\S{6});\s*\}/isU", $text, $matches);
$cnt=0;
foreach ($matches[1] as $entry) $colors[$entry]=$matches[2][$cnt++];

?>
$colors будет вот таким:
PHP:
Array
(
    [jan] => #000000
    [feb] => #FF00FF
    [mar] => #EE0000
)
 

_RVK_

Новичок
Mephistophel
А говоришь не занимаешься? Раз уж начал то хоть вопрос прочитай внимательно.
 

Mephistophel

Новичок
Diesel: обычно не занимаюсь.
Но на поставленный вопрос я ответил исчерпывающе.
 

SelenIT

IT-лунатик :)
Вариация на тему:
PHP:
$str = '.jan { background: #000000; color: #aqua; }
.feb 
{ 
	font-family: arial; background-color: #FF00FF;
}
.mar { background: #EE0000 top left; }';

preg_match_all("~\.([\w]+)\s+\{[^{]*background(-color)?\s*:[^;]*(\#[0-9a-f]{6})[^;]*;[^}]*\}~Uis",$str,$found,PREG_SET_ORDER);

$colors = array();
foreach ($found as $f) {
	$colors[$f[1]] = $f[3];
}
print_r($colors);
Единственное требование к таблице стилей - цвета фонов в виде #xxxxxx (в любом регистре).
 

lantastic

Новичок
Ребята, что вы пререкаетесь. Действительно, можно было кинуть ссылку на синтаксис регулярных выражений, но то что предоставили мне конкретный пример, куда интересней. Спасибо вам!
 

SiMM

Новичок
Я почему то почти уверен, что ты его даже не осмыслил и в следующий раз по малейшей проблеме (а как сделать то же самое, но с перламутровыми пуговицами?) прибежишь опять. Поэтому польза от приведения конкретного решения весьма сомнительна.
 

_RVK_

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

SelenIT

IT-лунатик :)
Diesel, прошу прощения, но я не согласен.

Разумеется, вначале тупо скопируют. Потом поймут, что их задаче он соответствует не на 100%. Попробуют поменять одно, другое. Возникнет потребность залезть в ман и разобраться, на что влияет тот или иной параметр/модификатор, и вообще вникнуть в предмет более основательно.

По-моему, делать так первые шаги в новой для себя области гораздо эффективнее, чем сперва погружаться с головой в теорию, а потом долго-долго искать в дебрях новых терминов и сущностей решение элементарной задачи. Сугубо ИМХО.

P.S. а уж какое удовольствие самому найти и исправить в чужом примере ошибку!
 

_RVK_

Новичок
Возникнет потребность залезть в ман и разобраться
Не будь наивным. Возникнет потребность прийти сюда и создать еще один топик типа "исправьте мне ошибку".
погружаться с головой в теорию, а потом долго-долго искать в дебрях новых терминов и сущностей решение элементарной задачи
А вот для этого и предназначен форум. Пролезьть через эти дебри, здесь с удовольствеем помогут, зато в голове останется гораздо больше.
 

SelenIT

IT-лунатик :)
Это все, конечно, так, но человеку, впервые пришедшему в веб-программирование, все же как-то приятнее отталкиваться от чего-то простого и приземленного. А то многообразие технологий, подходов и аббревиатур может поначалу просто вызвать ступор. Потом уже, освоившись, поняв, что к чему и как что с чем соотносится, можно начинать лезть в дебри - самостоятельно и/или с помощью форума. Не скажу за всех, сужу по собственному недавнему прошлому, да и настоящему)

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

lantastic

Новичок
Действительно, времени чтобы разобраться в регулярных выражениях нету... а они очень полезны. Но нужно быстрее запускать проект!

Похожее было в законах Мерфи: у вас есть время для решения проблем, которые отнимают у вас все время?
 
Сверху