Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP preg_replace进行以下替换?_Php_Regex - Fatal编程技术网

如何使用PHP preg_replace进行以下替换?

如何使用PHP preg_replace进行以下替换?,php,regex,Php,Regex,我有一个带一到两个空格的字符串。我想用一个空白代替一个空白,用一个空白代替两个空白。如果只是尝试在“”上匹配,它将取消所有空格。有什么方法可以做到这一点吗?不需要预先更换 str_replace(' ', ' ', $string); 或者,如果要确保行中不存在“到”空格,请循环该行: while (strpos($string, ' ') !== false) $string = str_replace(' ', ' ', $string); 除非您指的是任何空格(空格、制表

我有一个带一到两个空格的字符串。我想用一个空白代替一个空白,用一个空白代替两个空白。如果只是尝试在“”上匹配,它将取消所有空格。有什么方法可以做到这一点吗?

不需要预先更换

str_replace('  ', ' ', $string);
或者,如果要确保行中不存在“到”空格,请循环该行:

while (strpos($string, '  ') !== false)
    $string = str_replace('  ', ' ', $string);
除非您指的是任何空格(空格、制表符、换行符),否则您可以使用:

str_replace(array('  ', "\t\t", "\r\r", "\n\n"), array(' ', "\t", "\r", "\n"), $string);
单个空格:
“[^]”
(后面紧跟另一个空格的空格)。 双空格:

匹配“”(两个空格)。虽然对于这样的事情,我认为regex是过火了。只需使用
str_replace()
函数并将所有“”替换为“”

preg_replace('/\s+/',' ',$string);
现在所有双空间都将被单选

更新:

$replacements = array(' ','');
 preg_replace('/(\s{2})|(\s{1})/',$replacements,$string);
这样,双空间变为单空间,单空间变为无空间

$result = preg_replace('/ (?! )/', '', $subject);
仅当一个空格后面没有其他空格时,才匹配并删除该空格

输入:
1234567890
-->输出:
1234567890
<?php
    $s = 'SINGLE SPACE-DOUBLE  SPACE';
    echo $s . PHP_EOL;
    $s = strtr(
        $s,
        array(
            '  ' => ' ',
            ' ' => ''
        )
    );
    echo $s . PHP_EOL;
?>

PS:我正在测试其他案例。

不是deltanovember想要的。他想用空字符串替换单个空格。这在字符串末尾的空格上失败(并将删除空格后面的字符)。我意识到这并不是OP所要求的,但是我认为while循环会达到同样的目标。它仍然不会删除单个空格。问题是-如果有4个空格,OP会期望什么?这将返回2个空格,Tim的答案将返回3个空格。当然,这是未定义的行为
:)
@Kobi:我正在考虑另一个选项:用临时字符替换所有双(或更多)空格,删除所有未完成的空格,用空格替换所有临时字符。