PHP @ preg_replace从@到下一个空格

时间:2017-10-20 22:46:56

标签: php function preg-replace

我试图创建一个从@替换到下一个空间的函数,但我似乎无法让它正常工作...我得到了引用部分工作但这是我到目前为止:

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

任何帮助都会非常感激。

示例:

  

[quote]

     

@lalalala

     

Lorem ipsum dolor坐下来,精神上的精神。 Cras viverra   ornare lectus sit amet dignissim。 Vestibulum是一个mi leo。 Nunc placerat   accumsan elit,nec luctus ante malesuada sed。在urna non erat的Quisque   suscipit pharetra。

     

[/报价]

     

Morbi massa mauris,consequat vitae sem eu,maximus posuere ligula。   Fusce pretium ultricies lectus sit amet bibendum。 Aliquam nec dolor   乌仁娜。

预期产出:

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

尝试使用\S(非空格字符):/@(\S+)/is

答案 2 :(得分:0)

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

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

这是demo。这将选择文本中的所有内容直到空格。或者更好:

"/@(\w+)/is" 

这将只选择字母数字字符和下划线,如[A-Za-z0-9_]Demo