2011-08-04 47 views
1

我想用链接替换单词(不包括:,;。stc。)。我怎样才能做到这一点?如何解决这个字符串替换php的问题?

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

请注意, ,。 - 等是重要的。

回答

2

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

如果您试图替换单词,您的正则表达式应该类似于/[a-z]+/i,它对一个或多个字母进行不区分大小写的贪婪匹配。

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

把它们放在一起,你会得到以下内容,它会显示你要找的输出。

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

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

+0

谢谢!这有所帮助。 – faq

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

这是我的错误消息格式,现在纠正。 – classic

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> 
?> 
1

试试这个:

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