|
|
|
| Добрый день!
помогите пожалуйста составить регулярное выражение.
Есть контент с тегом картинки, как в нем заменить атрибут alt и title на свой.
<?php
$new_alt_title = ''новый альт";
$content = '<a href="main.jpg" onclick="return hs.expand(this)" ><img src="thumbs_main.jpg" alt='555588888' title="555588888" /></a>';
// что бы получилось
$content = '<a href="main.jpg" onclick="return hs.expand(this)" ><img src="thumbs_main.jpg" alt='новый альт' title='новый альт' /></a>';
?>
|
в изначальной картинки алт и титл могут быть разные и находится в разных местах(в конце тега или вначале), пути к картинке тоже разные. Ковычки (' ' и " ") желательно тоже хотелось бы учесть, если например изначальная картинка имеет ковычки " " или ' ' то и итоговая может быть и с такими ковычками.
Спасибо) | |
|
|
|
|
|
|
|
для: Ringo
(27.01.2011 в 09:38)
| | s/<img(.*?)alt=(['"]).*\2(.*?)>/<img $1alt=$2новый альт$2$3>/gis
s/<img(.*?)title=(['"]).*\2(.*?)>/<img $1title=$2новый тайтл$2$3>/gis; | |
|
|
|
|
|
|
|
для: SHAman
(27.01.2011 в 09:58)
| | Спасибо за ответ! только а как его вставить в функцию?
я пытался вставлять так:
$title = 'новый альт';
$content = preg_replace ("s/<img(.*?)title=(['\"]).*\2(.*?)>/<img $1title=$2".$title."$2$3>/gis", $content );
|
но это не работает =) | |
|
|
|
|
|
|
|
для: Ringo
(27.01.2011 в 12:11)
| | :)
Это перловые регулярки. Для использования в php нужно разделить ее на 2 части. Для первой регулярки части будут такие:
/<img(.*?)alt=(['"]).*\2(.*?)>/si
<img $1alt=$2новый альт$2$3>
|
То есть, код будет такой:
$content = preg_raplace("/<img(.*?)alt=(['"]).*\2(.*?)>/si", "<img $1alt=$2новый альт$2$3>", $content);
|
Для второй аналогично. Разбивка идет по слешам.
В Perl запись замены выглядит так:
$text =~ s/шаблон поиска/шаблон замены/модификаторы;
|
символ "s" показывает что мы именно ищем и заменяем. | |
|
|
|
|
|
|
|
для: SHAman
(27.01.2011 в 14:33)
| | Ага понял.
Только есть баг, если альт содержит цифру вначале
то на выходе получается не то что надо.
так работает нормально:
$title = 'новый альт1';
$image = preg_replace('/<img(.*?)alt=([\'"]).*\2(.*?)>/si', "<img $1alt=$2".$title."$2$3>", $image);
|
а вот так уже нет:
$title = '1новый альт1';
$image = preg_replace('/<img(.*?)alt=([\'"]).*\2(.*?)>/si', "<img $1alt=$2".$title."$2$3>", $image);
|
на выходе получается так:
<img src="main.jpg" alt="новый" альт1=""> | |
|
|
|
|
|
|
|
для: Ringo
(27.01.2011 в 15:00)
| | А зачем вы делаете конкатенацию?
"<img $1alt=$2".$title."$2$3>"
|
нужно заменить на
"<img $1alt=$2$title$2$3>"
|
| |
|
|
|
|
|
|
|
для: SHAman
(27.01.2011 в 18:14)
| | А так тоже не работает. Не правильный атрибут на выходе, именно с цифрой вначале.
Похоже происходит путаница с регулярным и контеном и на выходе получается
alt="2новый" альт22=""> | |
|
|
|
|
|
|
|
для: Ringo
(27.01.2011 в 19:28)
| |
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
$m='<a href="main.jpg" onclick="return hs.expand(this)" ><img src="thumbs_main.jpg" alt="555588888" title="555588888" /></a>';
$poisk='#(alt=\").+?(\" title=\").+?(\")#si';
$zamena="$1tvoi$2drugoi$3";
$new=preg_replace($poisk,$zamena,$m);
echo $new;
?>
|
| |
|
|
|
|
|
|
|
для: dima4321
(27.01.2011 в 21:48)
| | Спасибо за ответ!)
Но ваш пример как и предыдущий тоже с багом, если подставить цифру вначале tvoi или drugoi
то на выходе получается не правильный альт.
Но я решил эту проблему. пришлось использовать функцию при замене.
<?php
function img_alt_replace($part1, $alt, $part2, $title, $part3){
return stripslashes($part1.$alt.$part2.$title.$part3);
}
$m='<a href="main.jpg" onclick="return hs.expand(this)" ><img src="thumbs_main.jpg" alt="555588888" title="555588888" /></a>';
$title = "2новый альт22";
$new=preg_replace("#(alt=\").+?(\" title=\").+?(\")#ies", "img_alt_replace('$1', '$title', '$2', '$title', '$3')", $m);
echo $new;
?>
|
Пока этот пример работает как надо, багов не обнаружено -) | |
|
|
|
|
|
|
|
для: Ringo
(28.01.2011 в 08:02)
| | Такой пример работает до тех пор, пока в картинке альт следует перед тайтлом. Если поменять их местами - все перестанет работать. | |
|
|
|
|
|
|
|
для: Ringo
(28.01.2011 в 08:02)
| |
<?php
function AltTitle ($val){
$m_alt=preg_replace("/((<img.*?)alt=('|\"))(?:|.+?)(('|\")+?[^|>]+>)/is","$1NEW_ALT$4",$val);
$m_title=preg_replace("/((<img.*?)title=('|\"))(?:|.+?)(('|\")+?[^|>]+>)/is","$1NEW_TITLE$4",$m_alt);
return $m_title;
}
?>
|
| |
|
|
|