preg_replace函数的功能中删除角色

我需要从字符串中提取一些文字,然后替换,而不是在另外一个实例中删除一个字符文本。 希望这个例子会告诉你我的意思是(这是我至今):

$commentEntry = "@Bob1990 I think you are wrong..."; $commentText = preg_replace("/(@[^\s]+)/", "<a target=\"_blank\" href=\"http://www.youtube.com/comment_search?username=${1}$1\">$1</a>", $commentEntry);

我想要得到的结果是:

<a href="http://www.youtube.com/comment_search?username=Bob1990">@Bob1990</a> I think you are wrong...

但我越来越:

<a href="http://www.youtube.com/comment_search?username=@Bob1990">@Bob1990</a> I think you are wrong...

我一直在这一问题上至少一个小时,几乎放弃了希望,因此任何帮助是非常感谢!

--------------解决方案-------------

可以尝试这样的事情

$commentText = preg_replace("/(@)([^\s]+)/", "<a target=\"_blank\" href=\"http://www.youtube.com/comment_search?username=$2\">$1$2</a>", $commentEntry);

你可以做的是适应捕获。 移动@出括号:

preg_replace("/@([^\s]+)/",

然后,你可以写你的替换字符串像

'<a href="...$1">@$1</a>'

注意,如何第一$1只是重新插入的文本,第二个$1被逐字前缀@得到回。

你捕捉@在你的模式,所以它永远是输出,当你使用$1 。 试试这个:

$commentText =
preg_replace(
"/@([^\s]+)/",
"<a target=\"_blank\" href=\"http://www.youtube.com/comment_search?username=$1\">@$1</a>",
$commentEntry
);

这里的不同之处在于@不再捕获为部分$1 (即它会仅捕获Bob1990。由于这是一个文字值,它并不需要是任何图案的一部分。相反,我只是它改变输出作为元素文本字面值,直接之前捕获的名称。(即现在确实<a>@$1</a>而不仅仅是<a>$1</a> )。

分类:php 时间:2015-03-15 人气:0
本文关键词: PHP,性格,预浸取代
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.463 (s). 10 q(s)