如何修复此字符串替换php问题?

时间:2011-08-04 18:36:24

标签: php string replace

我想用链接替换单词(不包括:,。。stc。)。我怎么能这样做?

<?php
$string = "wordey; string, boom";
$string = preg_replace("/[^a-z]/i", "<a href='x'>/[^a-z]/i</a>", $string); //??
echo $string; // <a href='wordey'>wordey</a>; <a href='string'>string</a>, <a href='boom'>boom</a>
?>

请注意; ,。 - 等等很重要。

4 个答案:

答案 0 :(得分:2)

您的正则表达式或替换字符串都没有意义。正则表达式匹配范围[a-z]中的所有 not (由前导^表示),并且您的替换字符串似乎包含正则表达式语法,它不应该

如果您正在尝试替换这些单词,那么您的正则表达式可能看起来像/[a-z]+/i,它会对一个或多个字母执行不区分大小写的贪婪匹配。

要在替换中使用匹配的字符串,您可以使用\N,其中N是一个数字,表示您要引用的子匹配。要添加子匹配,请在您要引用的正则表达式的部分周围放置括号。正则表达式变为/([a-z]+)/i

将它们放在一起,你得到以下内容,它们似乎可以提供你正在寻找的输出。

$string = preg_replace("/([a-z]+)/i", "<a href='\\1'>\\1</a>", $string);

请注意,双反斜杠是一个将字面反斜杠插入字符串的转义序列。

答案 1 :(得分:1)

$string = preg_replace('/(\w+)/', '<a href="\\1">\\1</a>', $string);

答案 2 :(得分:1)

尝试这个

http://sandbox.phpcode.eu/g/1eaa6.php

<?php 
$string = "wordey; string, boom"; 
$string = preg_replace("/(.*?)([^a-z]+)/i",  
"<a href='x'>$1</a>$2", $string);  
$string = preg_replace("/, (.*)/", ", <a href='x'>$1</a>", $string); 
echo $string; // <a href='wordey'>wordey</a>; <a href='string'>string</a>, <a href='boom'>boom</a> 
?>

答案 3 :(得分:1)

试试这个:

$result = preg_replace('/([^;,\\s]+)/', '<a href="$1">$1</a>', $subject);