用于替换和添加HTML标记的属性的RegEx

The*_*o.T 1 php regex actionscript-3

给出以下代码:

<body>
  <img src="source.jpg" />
  <p>
    <img src="source.jpg" id ="hello" alt="nothing" />
    <img src="source.jpg" id ="world"/>
  </p>
</body>
Run Code Online (Sandbox Code Playgroud)

什么是最好的方法 - 使用正则表达式(或更好?) - 替换它,使它成为这样:

<body>
  <img src="source.jpg" id="img_0" />
  <p>
    <img src="source.jpg" id ="img_1"  alt="nothing" />
    <img src="source.jpg" id ="img_2"/>
  </p>
</body>
Run Code Online (Sandbox Code Playgroud)

换一种说法 :

  • 所有<image />标签都由一个id属性填充.

  • id属性应该包含一个递增的属性(这不是真正的问题,尽管它只是替换过程的一部分)

我想需要两个传递,一个用于删除所有存在的id属性,另一个用于填充新的属性?

ras*_*spi 5

<?php
$data = <<<DATA
<body>
  <img src="source.jpg" />
  <p>
    <img src="source.jpg" id ="hello" alt="nothing" />
    <img src="source.jpg" id ="world"/>
  </p>
</body>
DATA;

$doc = new DOMDocument('1.0', 'UTF-8');
$doc->strictErrorChecking = true;
$doc->standalone = true;
$doc->xmlStandalone = true;
$doc->formatOutput = true;
$doc->loadXML($data, LIBXML_NOWARNING | LIBXML_NOERROR);

$sNode = $doc->getElementsByTagName("img");

$id = 0;
foreach($sNode as $searchNode)
{
  $searchNode->setAttribute('id', "img_$id");
  $doc->importNode($searchNode);
  $id++;
}

$result = $doc->saveHTML();
echo $result;
Run Code Online (Sandbox Code Playgroud)