【发布时间】:2020-10-23 16:41:10
【问题描述】:
我有这样的短字符串
$str = 'abc | xx ?? "1 x \' 3" d e f \' y " 5 \' x yz';
我想从一个字符串中删除所有没有用单引号或双引号括起来的空格。 不应更改任何用单引号或双引号括起来的字符。 因此,我期望:
$expected = 'abc|xx??"1 x \' 3"def\' y " 5 \'xyz';
我目前基于字符比较的解决方案如下:
function removeSpaces($string){
$ret = $stop = "";
for($i=0; $i < strlen($string);$i++){
$char = $string[$i];
if($stop == "") {
if($char == " ") continue;
if($char == "'" OR $char == '"') $stop = $char;
}
else {
if($char == $stop) $stop = "";
}
$ret .= $char;
}
return $ret;
}
有更智能的解决方案吗?
【问题讨论】:
-
d e f \' y被"包围,这里的规则是什么?您找到第一个引号,然后,如果/当您找到下一个引号时,您开始删除空格? -
处理与PHP解释器相同。用双引号括起来的单引号和用单引号括起来的双引号被视为与任何其他字符一样。
-
@Thefourthbird 请不要将答案发布为 cmets。