提问者:小点点

使用RegEx在引号之间插入字符串


我允许用户创建带有空白属性值的XML元素,例如:

<crimes id="" total="" />

同时,我还从数据库中检索一个关联数组,用于填充XML指定的属性。数组将如下所示:

array(
    theft => 123,
    burglary => 456
)

检索数组后,我想使用该数组来填充已传入的XML的属性值。因此作为示例,第一个数组元素与示例XML组合将如下所示:

<crimes id="theft" total="123" />

有没有办法在PHP中使用正则表达式XML属性的引号之间插入数组值


共2个答案

匿名用户

这唯一有效的时候,是如果你收到的XML标签是一致的。它们每次都需要相同,否则没有模式,正则表达式用于匹配模式。

如果您的标签总是有id,那么我可以为它编写一个正则表达式。但是如果它们有时有一个或另一个,它会变得太复杂,您需要一个解析器。

匿名用户

虽然(正如您已经被告知的)您应该更好地使用SimpleXML或DOM,但这是您要求的自定义RegEx解决方案:

$list = array(
    "theft" => 123,
    "burglary" => 456
);

$template = '<crimes id="" total="" />';

foreach($list as $key => $value)
{
    $s =  preg_replace('/(id=")(")/', '${1}'.$key.'${2}', $template);
    $s = preg_replace('/(total=")(")/', '${1}'.$value.'${2}', $s);
    echo htmlentities($s)."<br>";
}

这是它的输出:

<crimes id="theft" total="123" />
<crimes id="burglary" total="456" />

如果缺少“id”或“总”——它只是省略它。