Как заменить все входящие элементы внутри одного блока?
Например, есть html:
<ul class="test-ul-class">
<li class="test-li-class">
<p class="other-class">Text1</p>
<img class="replace-text" src="/img1.png">
</li>
<li class="test-li-class">
<p class="other-class">Text2</p>
<img class="replace-text" src="/img2.png">
</li>
<li class="test-li-class">
<p class="other-class">Text3</p>
<img class="replace-text" src="/img3.png">
</li>
</ul>
Нужно заменить имя класса у всех img внутри ul с test-ul-class.
Ответы (1 шт):
Автор решения: Эдуард
→ Ссылка
Если именно регулярками, то можно так:
$str =<<<STR
<ul class="test-2-ul-class">
<li class="test-li-class">
<p class="other-class">Text1</p>
<img class="replace-text" src="/img1.png">
</li>
<li class="test-li-class">
<p class="other-class">Text2</p>
<img class="replace-text" src="/img2.png">
</li>
<li class="test-li-class">
<p class="other-class">Text3</p>
<img class="replace-text" src="/img3.png">
</li>
</ul>
<ul class="test-ul-class">
<li class="test-li-class">
<p class="other-class">Text1</p>
<img class="replace-text" src="/img1.png">
</li>
<li class="test-li-class">
<p class="other-class">Text2</p>
<img class="replace-text" src="/img2.png">
</li>
<li class="test-li-class">
<p class="other-class">Text3</p>
<img class="replace-text" src="/img3.png">
</li>
</ul>
STR;
$str = preg_replace_callback(
'~<ul class="test-ul-class">.+?</ul>~s',
function($m){
return preg_replace('~<img class="\K[^"]+~', '***', $m[0]);
},
$str
);
print_r($str);