Intereting Posts
Как синхронизировать проект PHP с помощью RSync и NetBeans? Отладка конфигурации PHP зависает – Ожидание сеанса XDebug (57%) Как я могу объединить массивы PHP? Добавление цвета строки альтернативной таблицы PHP в существующую таблицу HTML set_error_handler Не работает Как я хочу, чтобы он работал Могу ли я обслуживать файлы MP3 с помощью PHP? Проверьте, является ли число десятичным Могу ли я использовать phpBB в качестве «поддельного» поставщика идентификации? Как веб-сайт взломан «злонамеренно закодированным изображением, содержащим скрытый внутри него скрипт PHP»? как вызвать другой php-файл в представление Codeigniter CodeIgniter: 404 Страница не найдена на Live Server Использование метода модели Laravel в запросе Eloquent Ежедневный автоматический пост в стене пользователей Facebook Не удается установить date.timezone В файле php.ini Использовать ключевое слово в функциях – PHP

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

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

Фактически, что-то, что бы включить эти входные данные:

 [ asdf asdf asdf asdf ] 

В выходные данные:

 [asdf asdf asdf asdf] 

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

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

Обрезать, заменить вкладки и дополнительные пробелы с помощью пробелов:

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

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

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

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

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

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

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

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

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

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

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

Этот ответ берет вопрос буквально: он касается только пробелов и вкладок. Конечно, 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 

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

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

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

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

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

Просто используйте это регулярное выражение

 $str = trim(preg_replace('/\s\s+/', ' ', $str)); 

он заменит все вкладки и пробелы на одно пространство,

здесь знак + в регулярном выражении означает один или несколько раз, шаблон означает, что везде, где есть два или более пробелов, замените его на одно пространство