替换文本中的单词忽略网址

时间:2010-06-23 09:08:19

标签: php regex replace preg-replace

我使用此行在网址中搜索带有网址的名称。

$name = "xxx";
$text = "my name is xxx en my website is http://xxx.something.com";
$text = preg_replace("/\b(".preg_quote($name, "/").")\b/i", $url, $text);

如何更改此正则表达式以忽略文本中的网址

2 个答案:

答案 0 :(得分:1)

1)您可以使用正则表达式查找所有网址(例如http://snipplr.com/view/2371/regex-regular-expression-to-match-a-url/) - 记住他们的位置和长度

2)使用正则表达式查找单词的所有出现并记住位置和长度

3)浏览2)的结果并检查该单词是否不在网址中。

答案 1 :(得分:1)

不完全是您正在寻找的但可能是这个帮助:

xxx替换为yyy当且仅当xxx被空格包围或者是否位于字符串的开头或结尾时。

<?
$name = "xxx";
$text = "xxx my name is xxx en my website xxx is http://xxx.something.com xxx";
$text = preg_replace("%(?<=^| )".$name."(?= |$)%i", "yyy", $text);
echo $text."\n";
//yyy my name is yyy en my website yyy is http://xxx.something.com yyy
?>

如果PHP支持变量长度看起来断言,那会更容易;因为那时我们可以使用更准确的(?<!http://[^ ]+)\bxxx\b