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


preg_replace function removing spaces from the string

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

一个例子是,如果我的字符串是

嘿!

@Yosi

@Ben

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

嘿!

@Yosi@Ben

这似乎是因为我在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);  

正则表达式去掉任何空格,因为这就是它在('s|^)中所寻找的。

  1. 在那里使用环视断言(?<='s|^)(?='s|$)

  2. 或者断言非文字字符(?<!'w)(?!'w)

  3. 或者只需将它们重新插入到具有$1$2的替换文本中。

此外,您的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。