32

我当然有两个以空格为主题的单词,并且前后有很多空格,我需要做的是删除前后空格而没有中间的一次。

如何删除它之前和之后的空格?

4

5 回答 5

90

你不需要正则表达式,使用trim()

$words = '      my words     ';
$words = trim($words);
var_dump($words);
// string(8) "my words"

此函数返回一个字符串,其中从 str 的开头和结尾去除了空格。

于 2012-10-06T08:53:36.110 回答
6

为了完整起见(因为这个问题被标记regex),这里是trim()正则表达式的重新实现:

function preg_trim($subject) {
    $regex = "/\s*(\.*)\s*/s";
    if (preg_match ($regex, $subject, $matches)) {
        $subject = $matches[1];
    }
    return $subject;
}
$words = '      my words     ';
$words = preg_trim($words);
var_dump($words);
// string(8) "my words"
于 2012-10-06T09:05:00.180 回答
1

由于某种原因,上面的两个解决方案对我不起作用,所以我想出了这个解决方案。

function cleanSpaces($string) {
    while(substr($string, 0,1)==" ") 
    {
        $string = substr($string, 1);
        cleanSpaces($string);
    }
    while(substr($string, -1)==" ")
    {
        $string = substr($string, 0, -1);
        cleanSpaces($string);
    }
    return $string;
}
于 2015-07-18T11:15:28.070 回答
0

问题是关于如何使用正则表达式来做到这一点,所以:

$str1=~ s/^\s+|\s+$//g; 

也就是说^,在开头\s+(空白)|\s+$(结尾的空白)//g重复删除。同样的概念适用于 'ed' (vi/vim)

有时最好只回答提出的问题。

于 2019-03-26T14:58:16.303 回答
-1

如果修剪也不适合你,试试这个。您只需要将其写入不同的变量即可;

$str = ' hello world ';
echo strlen($str);

$trim_str = trim($str);
echo strlen($trim_str);
于 2020-06-18T17:00:22.013 回答