Короткие директивы вместо длинного HTML-кода

15.12.2013  21:25

В какой-то момент, утомившись прописывать целые коды для картинок, я накидал небольшие регулярки.
Итак, задача:
Заменять директивы вида на HTML-код картинки.

Решение:
Первой регуляркой я отлавливаю все такие директивы, которые есть в переменной $OUT, учитывая при этом многократные вхождения:
preg_match_all("|{([IMG]+)_([0-9]{1,})(.*)?}|U",$OUT,$out_name_ar, PREG_PATTERN_ORDER)

Затем нам понадобится вторая регулярка, которая будет вычленять названия картинок (то, что вписано внутри alt=" ... ").
preg_match_all("/([s| ]+[alt]+=["|"]+([^}+]+)?["|"]+)/is",$out_name_ar[0][$i],$out_name_ar2, PREG_PATTERN_ORDER)

А так как после первого регулярного выражения у нас получится многомерный массив, в котором количество найденных значений может быть больше одного (найдены и , и , и т.д.) то мы пройдёмся по массиву $out_name_ar, обойдём все найденные директивы. А внутри массива уже отловим имена картинок внутри директив.

if (preg_match_all("|{([IMG]+)_([0-9]{1,})(.*)?}|U",$OUT,$out_name_ar, PREG_PATTERN_ORDER)){
		for ($i=0;$i<=count($out_name_ar[0]);$i++) {
// отлавливаем alt=" ... " внутри директивы 
			if (preg_match_all("/([s| ]+[alt]+=["|"]+([^}+]+)?["|"]+)/is",$out_name_ar[0][$i],$out_name_ar2, PREG_PATTERN_ORDER)){
				if (!empty($out_name_ar2[2][0])) $arParams_im['name'] = $out_name_ar2[2][0];
			}
			else $arParams_im['name'] = '';
			$img_in_page = getOtherImages($level1,$out_name_ar[2][$i],$sys_name_current,false,$arParams_im);
//простая функция, формирующая HTML-код картинки со ссылкой на увеличенное изображение
			$OUT = str_replace($out_name_ar[0][$i], $img_in_page, $OUT);
		}
	}

Всё, готово!


перейти в Блог | Блог (стр. 10)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): PHP 29  web-программирование 46  регулярные выражения 6  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)