2013-09-26 4 views
-1

я получил следующую строку, результат декодирования гекс в строку,PHP - удалить лишние пробелы

" g e t s m h " 

, но результат должен быть,

"get smh" 

Я считаю, это может быть сделано с помощью preg_replace , но я понятия не имею с регулярным выражением. Добрый совет. Благодарю.

ответ

2

Попробуйте следующее:

\s(?!\s) 

И заменить ничем.

\s(?!\s) будет соответствовать каждому символу пробела (и символам новой строки и возврату каретки, а также формы и вкладки, но если это одна строка, это не должно быть проблемой), за исключением тех случаев, когда за ними следует другой символ пробела, так что в «" 2 пробела), только второе пространство заменяется ничем.

Вы можете использовать его как это:

$newstring = preg_replace('/\s(?!\s)/', '', $oldstring); 
+0

Я попытался preg_replace ('\ с (? ! \ s) ',' ', $ string), и я получил следующую ошибку: разделитель не должен быть буквенно-цифровым или обратным слэшем – sulaiman

+0

Вам нужно использовать разделители. Я думал, ты умеешь их использовать? Я добавлю использование в свой ответ немного: – Jerry

+0

@sulaiman См. Отредактированный ответ и демонстрацию [viper-7] (http://viper-7.com/EaKCCU). – Jerry

0

Попробуйте это. хоп это будет работать

$str = " g e t s m h "; 
$str = explode(' ', $str); 
$str_1 = str_replace(' ', '', $str[0]); 
$str_2 = str_replace(' ', '', $str[1]); 
echo $str_1.' '.$str_2; 
+0

Я предпочитаю использовать preg_replace и меньше кода. Спасибо, в любом случае. – sulaiman

0

Если кто-то найти это преобразовать шестнадцатеричное в строку без дополнительных пробелов и preg_replace, я, наконец, получить его работу с помощью mb_convert_encoding

mb_convert_encoding(pack('H*', $hexstring), 'ASCII', 'UCS-2'); 
Смежные вопросы