PHP preg_replace 从 @ 到下一个 space

PHP preg_replace from @ to next space

我正在尝试创建一个函数来将 @ 替换为下一个 space,但我似乎无法让它正常工作...我得到了引用部分,但这就是我到目前为止所得到的:

function test($body) { 
    $find = array( 
        "/\[quote\](.+?)\[\/quote\]/is",
        "/@(.+?)/is" 
);
 $replace = array(
        "<div class=\"quote\"></div>",
        "<a href=\"user.php?profile=\"></a>"
    ); 
    $body = htmlspecialchars($body); 
    $body = preg_replace($find, $replace, $body); 
    return $body;
}

任何帮助将不胜感激。

示例:

[quote]

@lalalala

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras viverra ornare lectus sit amet dignissim. Vestibulum a mi leo. Nunc placerat accumsan elit, nec luctus ante malesuada sed. Quisque at urna non erat suscipit pharetra.

[/quote]

Morbi massa mauris, consequat vitae sem eu, maximus posuere ligula. Fusce pretium ultricies lectus sit amet bibendum. Aliquam nec dolor urna.

预期输出:

<div class="quote"> 

<a href="user.php?profile=lalalala">lalalala</a>            

 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras viverra
 ornare lectus sit amet dignissim. Vestibulum a mi leo. Nunc placerat
 accumsan elit, nec luctus ante malesuada sed. Quisque at urna non erat
 suscipit pharetra. 

</div>

 Morbi massa mauris, consequat vitae sem eu, maximus posuere ligula.
 Fusce pretium ultricies lectus sit amet bibendum. Aliquam nec dolor
 urna.

第二个尝试使用以下正则表达式:

"/@(.+?)\s/is" 

这是一个demo。这将 select 文本中的所有内容,直到 space。或者更好:

"/@(\w+)/is" 

这只会 select 字母数字字符和下划线,例如 [A-Za-z0-9_]Demo

尝试将正则表达式 "/@(.+?)/is" 替换为 "/@\S+/"

尝试使用\S(不是-space字符):/@(\S+)/is