如何使用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:我正在考虑另一个选项:用临时字符替换所有双(或更多)空格,删除所有未完成的空格,用空格替换所有临时字符。