заменить несколько пробелов в строке одним пробелом
у меня есть файл с несколькими пробелами среди слов в какой-то момент. Мне нужно очистить файл и заменить существующие многопозиционные последовательности только одним пробелом. Я написал следующее утверждение, которое вообще не работает, и, похоже, я делаю большую ошибку.
$s = preg_replace("/( *)/", " ", $x);
мой файл очень прост. Вот часть его:
Hjhajhashsh dwddd dddd sss ddd wdd ddcdsefe xsddd scdc yyy5ty ewewdwdewde wwwe ddr3r dce eggrg vgrg fbjb nnn bh jfvddffv mnmb weer ffer3ef f4r4 34t4 rt4t4t 4t4t4t4t ffrr rrr ww w w ee3e iioi hj hmm mmmmm mmjm lk ;’’ kjmm ,,,, jjj hhh lmmmlm m mmmm lklmm jlmm m
4 ответов
ваше регулярное выражение заменяет любой количество мест (в том числе ноль) С пробелом. Вы должны заменить только два или более (в конце концов, замена одного пробела на себя бессмысленна):
$s = preg_replace("/ {2,}/", " ", $x);
то, что я обычно делаю, чтобы очистить несколько пространств:
while (strpos($x, ' ') !== false) {
$x = str_replace(' ', ' ', $x);
}
условия/гипотезы:
- строки с несколькими пробелами встречаются редко
- два пространства гораздо более распространены, чем три или более
-
preg_replace
дорого с точки зрения CPU - копировать символы в новую строку, следует избегать, когда это возможно
конечно, если условие №1 не выполняется, такой подход не имеет смысла, но это обычно быть.
если #1 выполняется, но ни один из других не выполняется (это может зависеть от данных, программного обеспечения (версия PHP) или даже аппаратного обеспечения), то следующее Может быть быстрее:
if (strpos($x, ' ') !== false) {
$x = preg_replace('/ +/', ' ', $x); // i.e.: '/␣␣+/'
}
в любом случае, если несколько пробелов появляются только, скажем, в 2% ваших строк, важно профилактическая проверка с strpos
, и вы, вероятно, не очень заботитесь об оптимизации оставшихся 2% случаев.
// Ваш вклад
$ул = "Hjhajhashsh dwddd дддд ССС ДДД-ый WDD ddcdsefe xsddd scdc yyy5ty ewewdwdewde wwwe ddr3r АКД eggrg vgrg fbjb ННН ЧД jfvddffv mnmb вере ffer3ef f4r4 34t4 rt4t4t 4t4t4t4t ffrr ррр ЖВ ж ж ee3e iioi и HJ хм ммммм mmjm ЛК ;’ kjmm ,,,, ююю ННН lmmmlm м мммм lklmm jlmm м";
ул. Эхо $.'
';
$output = preg_replace('!\s+!', ' ', $str); // Replace multispace with sigle.
echo $output;