PHP正则表达式问题

时间:2010-12-26 00:17:59

标签: php regex

我想替换这一行:

<img width="600" height="256" alt="javascript00" src="http://localhost/img/test.png" title="javascript00" class="aligncenter size-full wp-image-1973">

有了这个:

<p align="center"><img width="600" height="256" alt="javascript00" src="http://localhost/img/test.png" title="javascript00"></p>

使用简单的正则表达式。它包括删除图像类并仅在img类包含aligncenter时添加<p align="center">:)

感谢您的帮助! 圣诞快乐:)

解决方案:

$result = preg_replace('#<img([^>]*?)?\s+class="[^"]*aligncenter[^"]*"\s*([^>]*?)>#', '<p align="center"><img$1 $2></p>', $data);

2 个答案:

答案 0 :(得分:2)

这应该有效,尽管不建议用正则表达式解析和操作HTML。

<?php
$in = '<img width="600" height="256" alt="javascript00" src="http://localhost/img/test.png" title="javascript00" class="aligncenter size-full wp-image-1973">';

$out = preg_replace(
    '@<img( [^>]*?)\s*class="[^"]*"([^>]*?)>@', 
    '<p align="center"><img $1$2></p>', 
    $in
);

// if you need the image's class to be replaced with one class:
$out = preg_replace(
    '@<img( [^*]+?)\s*class="[^"]*"([^>]*?)>@', 
    '<p align="center"><img class="aligncenter" $1$2></p>', 
    $in
);

这里有other questions and answers处理你为什么不应该使用正则表达式来解析和操作HTML的问题(在SO允许你创建帐户之前应该要求阅读)。

假设您正在处理HTML,您正在从无法控制的外部源检索,您将使用DOMDocument的loadHTML方法并抑制错误(如果您无法控制标记,这将处理格式错误的HTML,但它甚至在构建文档时也会发出错误,所以请使用@)

$dom = new DOMDocument;
// supress errors because DOMDocument will actually parse a malformed document
// even when it emits errors. this is something that is wrong with PHP. 
@$dom->loadHTML('<img src="foo" class="bar">');
$xp = new DOMXPath($dom);
$node = $xp->query('body/img')->item(0);
$node->removeAttribute('class');
echo $dom->saveXML($node).PHP_EOL;

答案 1 :(得分:0)

如果您只需要img标签,可以使用此正则表达式:

  $data = '<img width="600" height="256" alt="javascript00" src="http://localhost/img/test.png" title="javascript00" class="aligncenter size-full wp-image-1973">';
  $result = preg_replace('#<img( [^>]*?)\s+class="[^"]*"\s*([^>]*?)>#', '<p align="center"><img $1$2></p>', $data);
  echo $result;