Php 在preg_replace函数期间删除字符

Php 在preg_replace函数期间删除字符,php,preg-replace,character,Php,Preg Replace,Character,我需要从字符串中提取一些文本,然后用在一个实例中而不是在另一个实例中删除的字符替换该文本。希望这个例子能告诉你我的意思(这就是我到目前为止所说的): $commentry=“@Bob1990我认为你错了…”; $commentText=preg_replace(“/(@[^\s]+)/”,“”,$commentEntry); 我希望结果是: <a href="http://www.youtube.com/comment_search?username=Bob1990">@Bob19

我需要从字符串中提取一些文本,然后用在一个实例中而不是在另一个实例中删除的字符替换该文本。希望这个例子能告诉你我的意思(这就是我到目前为止所说的):

$commentry=“@Bob1990我认为你错了…”;
$commentText=preg_replace(“/(@[^\s]+)/”,“”,$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);
$commentText=preg_replace(“/(@)([^\s]+)/”,“”,$commentEntry);

可以尝试这样的方法

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

您可以做的是调整捕获。将
@
移出大括号:

preg_replace("/@([^\s]+)/",
然后您可以编写替换字符串,如

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

请注意第一个
$1
如何重新插入文本,第二个
$1
以逐字
@
作为前缀以将其重新插入。您可以做的是调整捕获。将
@
移出大括号:

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
  );
$commentText=
预更换(
“/@([^\s]+)/”,
"", 
$commentry
);

这里的区别是,
@
不再作为
$1
的一部分捕获(即,它将只捕获Bob1990。因为它是一个文本值,所以不需要成为任何模式的一部分。相反,我只是将其更改为在捕获的名称之前作为元素文本中的文本值输出。(即,它现在是
@$1
而不仅仅是
$1
)。

您正在捕获模式中的
@
,因此当您使用
$1
时,它将始终被输出。请尝试以下方法:

$commentText = 
  preg_replace(
    "/@([^\s]+)/", 
    "<a target=\"_blank\" href=\"http://www.youtube.com/comment_search?username=$1\">@$1</a>", 
    $commentEntry
  );
$commentText=
预更换(
“/@([^\s]+)/”,
"", 
$commentry
);
这里的区别是,
@
不再作为
$1
的一部分捕获(即,它将只捕获Bob1990。因为它是一个文本值,所以不需要成为任何模式的一部分。相反,我只是将其更改为在捕获的名称之前作为元素文本中的文本值输出。(即,它现在执行
@$1
,而不仅仅是
$1