powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите с регуляркой...
15 сообщений из 15, страница 1 из 1
Помогите с регуляркой...
    #37919302
Cyclone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа искушенные в RegExp, поможИте плиз...

из кода плана:
Код: html
1.
<img src="/images/image1.jpg" alt="Картинка один">

хочу делать "на лету" так:
Код: html
1.
<div id="image"><img src="/images/image1.jpg" alt="Картинка один"></div><div id="alt">Картинка один</div>

.

Перепаковать изображения в <div> несложно:
Код: php
1.
preg_replace('^<img(.*)\>/isU)','<div id="alt">$1</div>',$source);

, но как сделать чтобы еще и выдирался альт и вставлялся в другой <div> (в моем примере это
Код: html
1.
<div id="alt">Картинка один</div>

)?
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #37919470
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyclone,

Код: php
1.
2.
3.
4.
5.
6.
$in = '<img src="/images/image1.jpg" alt="Картинка один">';
$out = preg_replace(
  '/<img src="([^"]+)" alt="([^"]+)"/', 
  '<div id="image"><img src="$1" alt="$2"></div><div id="alt">$2</div>', 
  $in
);
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #37919520
SharuPoNemnogu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по моему такую фигню проще на jquery сделать..
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #37923738
Cyclone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UsmanCyclone,

Код: php
1.
2.
3.
4.
5.
6.
$in = '<img src="/images/image1.jpg" alt="Картинка один">';
$out = preg_replace(
  '/<img src="([^"]+)" alt="([^"]+)"/', 
  '<div id="image"><img src="$1" alt="$2"></div><div id="alt">$2</div>', 
  $in
);



Большое спасибо!
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38016200
Cyclone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с такой проблемой: - регулярка жестко задана для позиции атрибутов тэга, если атрибуты идут в другой последовательности, то она не работает. Например атрибуты поменялясь местами -
Код: html
1.
$in = '<img alt="Картинка один" src="/images/image1.jpg" >';

и все, рег. бесполезна.

Я переделал регулярку, чтобы жрала все подряд, находила в теге <img> значение alt и транслировала отдельно в блок -

Код: php
1.
2.
3.
4.
5.
		$body = preg_replace(
  '%<img (.*) alt="([^"]+)" ([^()]*)>%', 
  '<div id="image" >$0</div><div id="alt">$2</div>', 
  $body
);



Но при таком подходе он обрабатывает только одно изображение, если изображений больше - то увы, все их пихает в один <div id=image>, а в <div id="alt"> только альт последнего изображения....

Снова прошу вашей помощи...
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38016210
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не догоняю, зачем нужно вот это "([^()]*)"?

Думаю, как то приблизительно так должно
Код: php
1.
/<img\s.*alt="([^"]*)[^>]*>"/
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38016270
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CycloneНапример атрибуты поменялясь местами
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//$in = '<img alt="Картинка один" src="/images/image1.jpg"/>';
$in = '<img src="/images/image1.jpg" alt="Картинка один"/>';

function img_transform($img_tag) {
	$doc = new DOMDocument();
	$doc->loadXML($img_tag);
	$img = $doc->getElementsByTagName('img')->item(0);
	$src = $img->attributes->getNamedItem("src")->nodeValue;
	$alt = $img->attributes->getNamedItem("alt")->nodeValue;
	
	return '<div id="image"><img src="' . $src . '" alt="' . $alt . '"></div><div id="alt">' . $alt . '</div>';
}

echo img_transform($in);

P.S.
Для HTML/XML всегда используйте DOM-парсер (имхо )
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38019418
Cyclone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleНе догоняю, зачем нужно вот это "([^()]*)"?

Думаю, как то приблизительно так должно
Код: php
1.
/<img\s.*alt="([^"]*)[^>]*>"/



Чой та не работает..

UsmanCycloneНапример атрибуты поменялясь местами
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
//$in = '<img alt="Картинка один" src="/images/image1.jpg"/>';
$in = '<img src="/images/image1.jpg" alt="Картинка один"/>';

function img_transform($img_tag) {
	$doc = new DOMDocument();
	$doc->loadXML($img_tag);
	$img = $doc->getElementsByTagName('img')->item(0);
	$src = $img->attributes->getNamedItem("src")->nodeValue;
	$alt = $img->attributes->getNamedItem("alt")->nodeValue;
	
	return '<div id="image"><img src="' . $src . '" alt="' . $alt . '"></div><div id="alt">' . $alt . '</div>';
}

echo img_transform($in);

P.S.
Для HTML/XML всегда используйте DOM-парсер (имхо )

Спасибо за совет! Но у меня ситуация такая, что у меня не просто тэги, а куски текста, и его на лету надо отпарсить с изображения в формат, привиденный выше, и тут Ваш способ использовать затруднительно...
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38019439
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в чем трудность? По сути, хтмл-теги - это не что иное как текст.
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38019510
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cycloneу меня не просто тэги, а куски текста, и его на лету надо отпарсить с изображения в формат, привиденный вышеПриведите несколько примеров входных данных
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38019536
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyclone,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
$str = 'dgfs gfd <img src="/images/image1.jpg" alt="Картинка один"> 
fghfgh <img alt="Картинка один2" src="/images/image1.jpg">  dsgfg';

function img2div($m) {
	return '<div id="image">'.$m[0].'</div><div id="alt">'.$m[1].'</div>';
}
$str = preg_replace_callback("/<img[^>]+alt\s*=\s*\"([^\"]+)\"[^>]*>/isu", "img2div", $str);

echo htmlspecialchars($str);
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38020980
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cycloneна лету надо отпарсить с изображения в формат, привиденный выше
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function img_transform($in) {
	$doc = new DOMDocument();
	$doc->loadXML($in);
	$img = $doc->getElementsByTagName('img')->item(0);
        // небольшая модификация
	$src = $img->hasAttribute("src") ? $img->attributes->getNamedItem("src")->nodeValue : "";
	$alt = $img->hasAttribute("alt") ? $img->attributes->getNamedItem("alt")->nodeValue : "";
	
	return '<div id="image"><img src="' . $src . '" alt="' . $alt . '"></div><div id="alt">' . $alt . '</div>';
}

$url = "http://images.yandex.ru/yandsearch?text=php+logo";
preg_match_all('/<img.*?>/i', file_get_contents($url), $out);
foreach ($out[0] as $img) {
	echo img_transform($img), PHP_EOL;
}
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38025952
Cyclone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UsmanCycloneна лету надо отпарсить с изображения в формат, привиденный выше
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
function img_transform($in) {
	$doc = new DOMDocument();
	$doc->loadXML($in);
	$img = $doc->getElementsByTagName('img')->item(0);
        // небольшая модификация
	$src = $img->hasAttribute("src") ? $img->attributes->getNamedItem("src")->nodeValue : "";
	$alt = $img->hasAttribute("alt") ? $img->attributes->getNamedItem("alt")->nodeValue : "";
	
	return '<div id="image"><img src="' . $src . '" alt="' . $alt . '"></div><div id="alt">' . $alt . '</div>';
}

$url = "http://images.yandex.ru/yandsearch?text=php+logo";
preg_match_all('/<img.*?>/i', file_get_contents($url), $out);
foreach ($out[0] as $img) {
	echo img_transform($img), PHP_EOL;
}



Спасибо, это работает, правда только с UTF, но это не проблема - можно конвертнуть.
Но хотелось бы все-таки добить с помощью регулярки, даже уже просто для себя, для понимания. Все приведенные выше - не работают.

UsmanCycloneу меня не просто тэги, а куски текста, и его на лету надо отпарсить с изображения в формат, привиденный вышеПриведите несколько примеров входных данных

Пример входных данных:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<b>Допускается:</b>

эвакуационные выходы из подвалов предусматривать через общие лестничные клетки с обособленным выходом наружу, отделенным от остальной части лестничной клетки глухой противопожарной перегородкой 1-го типа;

эвакуационные выходы из подвальных и цокольных этажей с помещениями категорий В, Г и Д предусматривать в помещения категорий В4, Г, Д и в вестибюль, расположенные на первом этаже зданий класса Ф5, при соблюдении требований 7.23;
<a href="/images/319160132_1935_big.jpg"><img src="/images/319160132_1935_sm.jpg" alt="Схема один " width="200" height="128" /></a>
эвакуационные выходы из фойе, гардеробных, курительных и санитарных узлов, размещенных в подвальных или цокольных этажах зданий классов Ф2, Ф3 и Ф4, предусматривать в вестибюль первого этажа по отдельным лестницам 2-го типа;

эвакуационные выходы из помещений предусматривать непосредственно на лестницу 2-го типа, в коридор или холл (фойе, вестибюль), ведущие на такую лестницу, при условиях, оговоренных в нормативных документах;
<img src="/images/319160132_1939_sm.jpg" alt="Схема два" /> <img alt="Схема три " src="/images/319160132_1940_sm.jpg"/>
оборудовать тамбуром, в том числе двойным, выход непосредственно наружу из здания, из подвального и цокольного этажей.
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38026126
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CycloneНо хотелось бы все-таки добить с помощью регулярки, даже уже просто для себя, для понимания. Здесь обсуждают вашу проблему и дают правильные советы.
...
Рейтинг: 0 / 0
Помогите с регуляркой...
    #38035430
Cyclone
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Usman,

Покорнейше благодарю.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Помогите с регуляркой...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]