用链接替换某些单词,但排除链接中已有的单词

时间:2013-11-01 04:19:49

标签: php regex string

我想在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>个问题。”

请注意,另一个标签内部有一个“”。我应该怎么做,如果字符串,说“编程”已经在一个链接,它不会转换它?有可能吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

尝试使用否定assertion

  

Lookbehind断言以(?&lt; =表示正断言)和(?&lt;!表示负断言的负断言

开头      

Lookahead断言以(?=正面断言和(?!表示否定断言)开头

示例:

  

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

     

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

     

PHP Regex negative look behind assertion, preg_replace_callback

答案 1 :(得分:0)

这样可行

<?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."

答案 2 :(得分:0)

在字符串替换功能中传递你的单词,在这个单词之前和之后用空格替换。这可能会解决你的问题我认为

$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."