如何删除preg_replace();??

gen*_*sis 2 php preg-replace

我不知道如何解释这个,所以我会在我的代码上显示它.

<a href="link.php">First</a> and 
<a href="link.php" class="delete">Second</a> and 
<a href="link.php">Third</a>
Run Code Online (Sandbox Code Playgroud)

如何删除开始<a href="link.php" class="delete">和结束</a>而不是其他?

我要求preg_replace();并且我不是在寻找DomDocument或其他方法来做到这一点.我只是想看看例子preg_replace();

它是如何实现的?

hak*_*kre 7

仅选择要保留的组:

$pattern = '~(<a href="[^"]*" class="delete">)([^<]*)(</a>)~';
//                   1                           2      3
$result = preg_replace($pattern, '$2', $subject);
Run Code Online (Sandbox Code Playgroud)

您可以在preg_replace手册页上找到更多示例.

  • 所谓的[反面](http://www.ideone.com/5CRPB)是不是被问到了什么? (2认同)

Tom*_*lak 5

由于您在评论中要求我展示执行此操作的任何方法,因此它是.

$html =<<<HTML
<a href="link.php">First</a> and 
<a href="link.php" class="delete">Second</a> and 
<a href="link.php">Third</a>
HTML;

$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);

$elems = $xpath->query("//a[@class='delete']");
foreach ($elems as $elem) {
    $elem->parentNode->removeChild($elem);
}

echo $dom->saveHTML();
Run Code Online (Sandbox Code Playgroud)

请注意,saveHTML()即使您只解析了一个片段,也会保存完整的文档。

从 PHP 5.3.6 开始,您可以添加一个$node参数来指定它应该返回的片段 - 类似的东西$xpath->query("/*/body")[0]会起作用。