如果单词不在页眉内,则替换Preg


Preg replace if words are not inside an header

我试图做一些简单的事情,但我失败了:我想在PHP中使用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>

我的正则表达式模式哪里错了?谢谢

试试这个:

<?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。这对多个关键字有增强功能。