正则表达式 - 替换内容 - eZ Publish XML 字段

Regex - Replacing content - eZ Publish XML field

我有一个 Xml 内容,我想在使用 eZ Publish 5 API 创建它之前对其进行修改。

我正在尝试实现一个 Regex 来修改内容。

这是我拥有的 Xml 代码(具有 html 个实体):

Print of Xml code http://img15.hostingpics.net/pics/453268xmlcode.jpg

我希望能够在 :

中捕捉到 empty.jpg
<img alt="" src="http://www.asite.org/empty.jpg" />

并将整行 每次出现 替换为:

<custom name="my_checkbox"></custom>

问题:

img 标签有时可以包含其他属性,例如:height="15" width="12"

&lt;img height="15" alt="" width="12" src="http://www.asite.org/empty.jpg" /&gt;

有时属性以不同的顺序位于 src 属性之后。

目标是:

Xml code - Aim http://img15.hostingpics.net/pics/318980xmlcodeaim.jpg

到目前为止,我已经尝试了很多方法,但没有任何效果。

在此先感谢您的帮助。

干杯!

编辑:

这是我迄今为止尝试过的示例:

/(&lt;img [a-z = ""]* src="http:\/\/www\.asite\.org\/empty\.jpg" \/&gt)/g

处理 XML 我使用了 XML 解析器来到达所需的部分。

然后我们可以将正则表达式 (~<img.*?>(?=</span)~) 应用于 select 并将图像标签替换为您的自定义标签(请注意,在 xml 解析器接收到的对象中 html 实体被替换为它们的等效字符)。

这是一段模拟和处理您的情况的代码:

<?php
$xmlstr = <<<XML
<sections>
  <section>
    <paragraph>
      <literal class="html">
        &lt;img alt="" src="http://asite.org/empty.png" /&gt;&lt;/span&gt;&lt;/span&gt; Yes/no&amp;nbsp;&lt;br /&gt;
        &lt;img alt="" src="http://asite.org/empty.png" /&gt;&lt;/span&gt;&lt;/span&gt; Other text/no&amp;nbsp;&lt;br /&gt;
      </literal>
    </paragraph>
  </section>
</sections>
XML;

$sections = new SimpleXMLElement($xmlstr);

foreach ($sections->section->paragraph as $paragraph) {
  $re = "~<img.*?>(?=</span)~";
  $subst = "<custom name=\"my_checkbox\"></custom>";
  $paragraph->literal = preg_replace($re, $subst, $paragraph->literal);
}

echo $sections->asXML();

?>

输出为:

<?xml version="1.0"?>
<sections>
  <section>
    <paragraph>
      <literal class="html">
        &lt;custom name="my_checkbox"&gt;&lt;/custom&gt;&lt;/span&gt;&lt;/span&gt; Yes/no&amp;nbsp;&lt;br /&gt;
        &lt;custom name="my_checkbox"&gt;&lt;/custom&gt;&lt;/span&gt;&lt;/span&gt; Other text/no&amp;nbsp;&lt;br /&gt;
      </literal>
    </paragraph>
  </section>
</sections>

可以找到在线演示HERE