(我想让我的用户用他们的名字标记其他用户,问题:当有人再次编辑他的帖子时,他会在他的编辑器中获得链接。当他保存他的编辑时,脚本将破坏旧链接。 。)
我用数组中包含的单词替换大字符串中的所有单词。
$users = {'this', 'car'}
$text = hello, this is <a title="this" href="">a test this</a>
$search = '!\b('.implode('|', $users).')\b!i';
$replace = '<a target="_blank" alt="$1" href="/user/$1">$1</a>';
$text = preg_replace($search, $replace, $text);
正如您在上面所看到的,我尝试替换这个&#39;和&#39; car&#39;在$ text with
<a target="_blank" alt="$1" href="/user/$1">$1</a>
问题是,我的脚本在我的链接中也取代了这个&#39;
<a title="this" href="">this</a>
我不完全确定,但我想,你知道我的意思。 所以我的剧本破坏了我的链接...
我不需要检测,如果单词是在html元素中,因为它应该能够替换其他标签中的单词,如h1或p ......
我需要类似的内容 一个模式,只有匹配,当单词看起来像: &#34;这个&#34; &#34;这个,&#34; &#34;,这个&#34; &#34;这个:&#34; ... (没问题,如果我必须手动设置这些......)
另一个很棒的解决方案:一个字符串,我可以在其中设置不允许的html标记。
$ tags =&#39; a,e,article&#39;;
迎接
答案 0 :(得分:0)
这应该这样做
<.*?this.*?>(*SKIP)(*FAIL)|\b(this)\b
演示:https://regex101.com/r/fX0pT1/1
有关此正则表达式方法的更多信息,http://www.rexegg.com/regex-best-trick.html。
PHP用法:
$users = array('this', 'car');
$text = 'hello, this is <a title="this" href="">a test this</a>';
$terms = '(' . implode('|', $users) . ')';
$search = '!<.*?'.$terms.'.*?>(*SKIP)(*FAIL)|\b(' . $terms . ')\b!i';
echo $search;
$replace = '<a target="_blank" alt="$2" href="/user/$2">$2</a>';
echo preg_replace($search, $replace, $text);
输出:
hello, <a target="_blank" alt="" href="/user/this">this</a> is <a title="this" href="">a test <a target="_blank" alt="" href="/user/this">this</a></a>
PHP演示:https://eval.in/415964
...或者如果您只想要链接,https://regex101.com/r/fX0pT1/2,<a.*?this.*?>(*SKIP)(*FAIL)|\b(this)\b
。