将某些字词替换为链接,但排除链接中已有的字词


Replace certain words with link, but exclude word that already in a link

我想在PHP中使用正则表达式/字符串替换函数,这样我就可以用链接替换某些关键字:假设有一个字符串:"

"大家好,我想问一个编程问题。"

输出应为

"大家好,我想问一个<a href="https://www.stackoverflow.com">programming</a>问题。"

听起来可以使用正则表达式/字符串函数轻松完成一些事情,但是,我发现如果字符串中已经有一个链接,例如:

"大家好,我想问一个<a href="https://www.stackoverflow.com">programming related</a>问题。"

正常的正则表达式/字符串替换函数将使其:

"大家好,我想问一个<a href="https://www.stackoverflow.com"><a href="https://www.stackoverflow.com">programming</a> related</a>问题。"

请注意,另一个标记中有一个"。 如果字符串,比如"编程"已经在链接中,它不会转换它,我该怎么办?可能吗?

谢谢!

尝试使用否定断言

后视断言以 (?<= 表示正面断言和 (?<!

开头表示否定断言表示否定断言

前瞻断言以 (?= 表示肯定断言和 (?! 表示否定断言)开头

例子:

http://www.ibm.com/developerworks/library/os-php-regex2/

http://sabirul-mostofa.blogspot.com/2011/05/php-regex-lookaround-assertion.html

PHP 正则表达式负面外观背后的断言,preg_replace_callback

这将起作用

<?php
$str='Hello guys I want to ask a <a href="https://www.stackoverflow.com">programming-related</a> questions.';
$str=strip_tags($str);
$str=str_replace("programming",'<a href="https://www.stackoverflow.com">programming</a>',$str);
var_dump($str);

输出:

string(101) "Hello guys I want to ask a <a href="https://www.stackoverflow.com">programming</a>-related questions."

在字符串替换函数中,像这样在单词前后传递要替换的单词。我认为这可能会解决您的问题

$str= "Hello guys I want to ask a programming questions. Hello guys I want to ask a <a href='https://www.stackoverflow.com'>programming</a> questions.";
$str=str_replace(" programming ",'<a href="https://www.stackoverflow.com">programming</a>',$str);
var_dump($str);

输出

"Hello guys I want to ask a <a href='https://www.stackoverflow.com'>programming</a> questions. Hello guys I want to ask a <a href='https://www.stackoverflow.com'>programming</a> questions."