我当然有两个以空格为主题的单词,并且前后有很多空格,我需要做的是删除前后空格而没有中间的一次。
如何删除它之前和之后的空格?
你不需要正则表达式,使用trim():
$words = ' my words ';
$words = trim($words);
var_dump($words);
// string(8) "my words"
此函数返回一个字符串,其中从 str 的开头和结尾去除了空格。
为了完整起见(因为这个问题被标记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"
由于某种原因,上面的两个解决方案对我不起作用,所以我想出了这个解决方案。
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;
}
问题是关于如何使用正则表达式来做到这一点,所以:
$str1=~ s/^\s+|\s+$//g;
也就是说^
,在开头\s+
(空白)|
或\s+$
(结尾的空白)//g
重复删除。同样的概念适用于 'ed' (vi/vim)
有时最好只回答提出的问题。
如果修剪也不适合你,试试这个。您只需要将其写入不同的变量即可;
$str = ' hello world ';
echo strlen($str);
$trim_str = trim($str);
echo strlen($trim_str);