2015-11-18 4 views
2

У меня есть строка, которая является чем-то вроде , ] }PHP: str_replace() - игнорировать пробелы

Я хотел бы заменить его ] }

проблема, я не знаю, будет ли пробел между , и ]. Может быть пустое пространство или пустое пространство. Там могут быть вкладки или могут быть разрывы строк.

Как заменить ,<any white space here>] } на номер ] }, пожалуйста?

+1

use regex 'preg_replace ('@ \, [\ h \ s] + @', '', $ string)' – anonymous

ответ

2

Вместо str_replace вы можете просто использовать preg_replace вроде как

echo preg_replace('/,\s*\]\s*}/',"] }",$string); 
  • \s*\s проверки для любого символа пробела, который включает в себя new line,tabs,space и * для нуля или более вхождение пространства
  • \]\s*} это будет проверять для ]brace\s*, как указано выше, и } фигурная скобка litera lly
2

Вы можете использовать regex с preg_replace.

$str = preg_replace('/,\s*(?=]\s*})/', "", $str); 
  • \s* означает любое количество любого пробельных (\s является shorthand для [ \t\r\n\f])
  • (?=]\s*}) в lookahead используется для проверки, если ,\s* сопровождается ]\s*}

See demo at eval.in

+0

Хорошо объясненный ответ – Tristup

1

Жаль, что это было без тестирования. Это альтернатива preg_replace. Это будет обрезано, указанное во втором параметре, \t, \n, , ,. Таким образом, после обрезки, ты останешься с ]}

"\t" (ASCII 9 (0x09)), a tab 
"\n" (ASCII 10 (0x0A)), a new line (line feed) 

echo ltrim($string, ", \t\n"); 

, если Вы не уверены в том, что там может быть возврат каретки, или вертикальную петлю в наличии, вы можете

echo ltrim(ltrim($str1, ",")); 

Это первый подрезки вниз запятая затем обрезать эти символы, , \t, \r, \0, \x0B

Вот demo

+1

Можете ли вы добавить подробную информацию о том, почему это работает, что это на самом деле делает? cheers – Martin

+1

@martin обновленный ответ в более подходящем обзоре – Andrew

Смежные вопросы