如果单词不在标题内,则为Preg_replace

时间:2014-04-09 21:20:34

标签: php regex

我试图做一些简单但我失败的事情: 我想在PHP中使用preg_replace使关键字成为链接,但我不想将其插入标题中。

我的实际preg_replace:

$data_replace = '<a href="'.$link.'">$1</a>';
$word_to_replace = "keyword";
$data_source = "<h1>keyword</h1><p>keyword</p>"
$pattern = "/\\b(?!<h[0-6]*\>)(.*?)(" . trim($word_to_replace) . ")(.*?)(?!<\/h[0-6]>)\\b/";
preg_replace($pattern, $data_replace, $data_source, 1);

我想得到:

<h1>keyword</h1><p><a href="http://...">keyword</a></p>

目前,我的输出结果为:

<h1><a href="http://...">keyword</a></h1><p>keyword</p>

我的正则表达式错误在哪里? 谢谢!

1 个答案:

答案 0 :(得分:1)

试试这个:

<?php

$data_replace = '<a href="'.$link.'">$1</a>';
$words = ["keyword","foo"];
$out = "<h1>keyword</h1><p>keyword</p>";
foreach ($words as $word){
    $pattern = "/(<[^h].*?>)($word)(<\/)/";
    $out = preg_replace($pattern, "\\1<a href=\"#\">$word</a>\\3", $out);
}
var_dump($out);

产地:

dejavu:~ jancha$ php -q aa.php
string(46) "<h1>keyword</h1><p><a href="#">keyword</a></p>"

P.S。 这增强了多个关键字。