preg_replace函数从字符串中删除空格

时间:2015-03-22 15:33:53

标签: php preg-replace

我尝试构建一个标记系统,它运行正常,函数preg_replace()存在问题,它会从字符串中删除不必要的空格。

一个例子是我的字符串是

  嘿!

     

@Yosi

     

@Ben

空格将被删除,它将成为:

  

喂!

     

@ Yosi @奔

似乎因为我在preg_replace中的条件包含为字符串。

我的代码:

$String = preg_replace ('/(\s|^)@'.$Memory['Name'][$x].'(\s|$)/', '[URL="http://'.$_SERVER['HTTP_HOST'].'/member.php?u='.$Memory['UserID'][$x].'"]@'.$Memory['Name'][$x].'[/URL]', $String);  

1 个答案:

答案 0 :(得分:1)

你的正则表达式会剥离任何空格,因为它是(\s|^)所寻找的内容。

  1. 在那里使用外观断言(?<=\s|^)(?=\s|$)

  2. 或者断言非罗嗦字符(?<!\w)(?!\w)

  3. 甚至可以使用$1$2将其重新插入到替换文字中。

  4. 此外,您的preg_replace看起来像是在循环中使用。使用preg_replace_callback来检查所有潜在的用户名非常简单:

    $string = preg_replace_callback("/(?<!\w)@(\w+)(?!\w)/",
        function($m) use ($names) {
            list($asis, $name) = $m;
            if ($isset($names[$name])) {
                return "[URL=....]";
            }
            else return $asis;
        },
        $string
    );
    

    样式建议:并避免使用大写变量名称。 PHP不是BASIC。