it-roy-ru.com

Как заменить вкладки пробелами внутри переменных в PHP?

$data содержит вкладки, начальные и множественные пробелы. Я хочу заменить все вкладки пробелом. Несколько пробелов с одним пробелом и удалить ведущие пробелы.

На самом деле что-то, что превратит эти входные данные:

[    asdf asdf     asdf           asdf   ] 

В Результатные данные:

[asdf asdf asdf asdf]

Как мне это сделать?

14
Arthur
$data = trim(preg_replace('/\s+/g', '', $data));
15
RaYell

Обрежьте, замените табуляцию и лишние пробелы одиночными пробелами:

$data = preg_replace('/[ ]{2,}|[\t]/', ' ', trim($data));
17
ahc

Предполагая, что квадратные скобки не являются частью строки, и вы просто используете их в иллюстративных целях, тогда:

$new_string = trim(preg_replace('!\s+!', ' ', $old_string));

Вы можете сделать это с помощью одного регулярного выражения, но это будет довольно сложное регулярное выражение. Вышесказанное намного проще.

Примечание: Я также предполагаю, что вы не хотите заменять "AB\t\tCD" (\ t - вкладка) на "AB CD".

4
cletus
$data = trim($data);

Это избавляет от ваших ведущих (и конечных) пробелов.

$pattern = '/\s+/';
$data = preg_replace($pattern, ' ', $data);

Это превращает любую коллекцию из одного или нескольких пробелов в один пробел.

$data = str_replace("\t", " ", $data);

Это избавляет от ваших вкладок.

1
Gabriel Hurley
$new_data = preg_replace("/[\t\s]+/", " ", trim($data));
1
slosd

В случае, если вам нужно удалить   тоже.

$data = trim(preg_replace('/\s+|nbsp;/g', '', $data));
0
Ivo Pereira

Этот ответ принимает вопрос буквально: он только относится к пробелам и символам табуляции. Конечно, OP , вероятно также хочет включить другие виды пробелов в то, что урезано/сжато, но давайте представим, что он хочет сохранить встроенный CR и/или LF,.

Во-первых, давайте настроим некоторые константы. Это обеспечит как простоту понимания, так и ремонтопригодность в случае необходимости внесения изменений. Я добавил несколько лишних пробелов, чтобы вы могли легче сравнивать сходства и различия.

define( 'S', '[ \t]+'      ); # Stuff you want to compress; in this case ONLY spaces/tabs
define( 'L', '/\A'.S.'/'   ); # stuff on the Left Edge will be trimmed
define( 'M',   '/'.S.'/'   ); # stuff in the Middle will be compressed
define( 'R',   '/'.S.'\Z/' ); # stuff on the Right Edge will be trimmed
define( 'T', ' '           ); # what we want the stuff compressed To

Мы используем \A и \Zescape-символы , чтобы указать начало и конец темы, вместо типичных ^ и $, которые ориентированы на строки метасимволы . Это не столько потому, что они нужны в данном случае, сколько для "защитного" программирования, если значение S изменится, чтобы сделать его необходимым в будущем.

Теперь о секретном соусе: мы собираемся воспользоваться некоторой специальной семантикой preg_replace , а именно (выделение добавлено)

Если в массиве замены меньше элементов, чем в массиве шаблонов, любые дополнительные шаблоны будут заменены пустой строкой.

function trim_press( $data ){
    return preg_replace( [ M, L, R ], [ T ], $data );
}

Таким образом, вместо строки шаблона и строки замены мы используем массив шаблона и массив замены, что приводит к обрезанию дополнительных шаблонов L и R.

0
Jeff