preg_replace:如何剥离所有空白区域?

时间:2010-09-24 16:45:01

标签: php regex preg-replace whitespace

如何剥离所有空格和 

我把它作为我创建的包装器的输入,

[b]       bold       [/b]

所以在将文字转换为粗体之前,我想剥去所有空格和& nbsp,并将其转换为[b]bold[/b]

$this->content = preg_replace("/\[(.*?)\]\s\s+(.*?)\s\s+\[\/(.*?)\]/", 
                "[$1]$2[/$3]", 
                $this->content);

但它不起作用!你能帮忙吗?

7 个答案:

答案 0 :(得分:6)

不需要基于正则表达式的解决方案。您只需使用str_replace作为:

$input = "[b]       bold       [/b]";
$input = str_replace(array(' ',' '),'',$input);
echo trim($input); // prints [b]bold[/b]

答案 1 :(得分:3)

我找到了另一个解决方案

$this->content = preg_replace("/\[(.*?)\]\s*(.*?)\s*\[\/(.*?)\]/", "[$1]$2[/$3]", html_entity_decode($this->content));

答案 2 :(得分:2)

$this->content = preg_replace(
    '~\[(.*?)](?:\s| )*(.*?)(?:\s| )*\[/\\1]/', 
    '[$1]$2[/$1]', 
    $this->content
);

答案 3 :(得分:1)

你可以用空字符串替换空格,例如

preg_replace("/(?:\s| )+/", "", $this->content, -1)

-1会导致替换命中匹配的每个实例。

答案 4 :(得分:1)

回答有点迟,但希望可以帮助其他人。从html中提取内容时最重要的是在php中使用utf8_decode()。然后所有其他字符串操作变得轻而易举。甚至可以通过将浏览器中的粘贴字符直接复制到php代码来替换外来字符。

以下函数将 替换为空字符。然后使用preg_replace()将所有空格替换为空字符。

function clean($str)
{       
    $str = utf8_decode($str);
    $str = str_replace(" ", "", $str);
    $str = preg_replace("/\s+/", "", $str);
    return $str;
}

$html = "[b]       bold       [/b]";
$output = clean($html);
echo $output;
  

并[b]粗体[/ B]

答案 5 :(得分:0)

为您提供正则表达式的完整解决方案:

$this->content = preg_replace( '/\[([a-z]+)\](?: |\s)*(.*?)(?: |\s)*\[\/([a-z]+)\]/', '[$1]$2[/$3]', $this->content );

但在这种情况下,你应该结合空白删除和bbcode转换来确保标记是正确的:

$this->content = preg_replace( '/\[b\](?:&nbsp;|\s)*(.*?)(?:&nbsp;|\s)*\[\/b]/', '<b>$2</b>', $this->content );

答案 6 :(得分:0)

另一种可行的方法是:

$this->content = trim(str_replace('&nbsp;','',$this->content));

PHP手册链接:

trim()http://us.php.net/trim

*注意:这是假设$ this-&gt;内容仅包含OP发布的字符串