Я хочу использовать regex для замены атрибутов src
html. HTML не искажен и, к счастью, принимает ту же форму на всех страницах в базе данных, т. Е.
<img src="http://img.ruphp.com/php/1.png" />
У меня есть код, который отлично работает, если на странице есть только одно изображение. Я хочу знать, как лучше заменить несколько изображений, так как это заменит все теги изображений той же строкой.
$result = $s->db_query("SELECT reviewFullText as f FROM reviews WHERE reviewsID = 155"); while($row = mysql_fetch_array($result)) { $body = stripslashes(html_entity_decode($row['f'], ENT_NOQUOTES, "UTF-8")); preg_match_all('/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', $body, $matches); for($i=0;$i<count($matches[0]);$i++) { $number = preg_replace("/[^0-9]/", '', $matches[0][$i]); echo preg_replace('/<img.*?(src\=[\'|"]{0,1}.*?[\'|"]{0,1})[\s|>]{1}/i', '<img src="http://xy/a/' . $number . '.png"', $matches[0][$i]); } }
Поэтому, если страница содержит два файла, один из которых называется 1.png, а один называется 2.png, скрипт должен анализировать номера и заменять их другим URL-адресом, например http://img.ruphp.com/php/1.png
и http://img.ruphp.com/php/2.png
.
Я слышал, что preg_replace_callback
– лучший способ сделать это, но я не знаю, как это сделать … Помогите!
Не используйте регулярные выражения для нерегулярных языков, таких как HTML . Вместо этого используйте синтаксический анализатор . Это сэкономит вам много времени и боли.
# Untested code: $xml = new SimpleXml($xmlString); foreach ($xml->xpath('//img') as $imgNode) { $imgNode->addAttribute('src', "http://xy/a/" . $imgNode->getAttribute('src')); } echo $xml->asXML();
Обратите внимание, что вам понадобится что-то вроде DOMDocument::loadHtml()
, если ваш html не является xhtml (то есть действительным xml), но идея остается прежней.
Добавьте глобальный флаг замены «g» в ваше регулярное выражение.
'/ your_regex / i g '
Как предложил soulmerge, поскольку ваш html не искажен (я полагаю, вы имеете в виду, что это хорошо сформированный XML), преобразование XSLT было бы эффективным способом изменить что-либо в вашем документе. Вы можете сопоставить атрибут @src и изменить его в соответствии с вашими требованиями.
Вы также можете сопоставлять любые другие теги / атрибуты, если вам нужно изменить некоторые другие части документа одновременно.