Ответ 1
$data = trim(preg_replace('/\s+/g', '', $data));
$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
Мы используем \A
и \Z
escape-символы, чтобы указать начало и конец объекта, вместо типичного ^
и $
, которые являются линейно ориентированными метасимволами. Это не так, потому что они необходимы в этом случае столько же, сколько "защитное" программирование, если значение S
изменится, чтобы сделать их нужными в будущем.
Теперь для секретного соуса: мы собираемся воспользоваться некоторой специальной семантикой preg_replace, а именно (выделено мной)
Если в замене массива меньше элементов, чем в массиве шаблонов, любые дополнительные шаблоны будут заменены пустой строкой.
function trim_press( $data ){
return preg_replace( [ M, L, R ], [ T ], $data );
}
Итак, вместо строки шаблона и строки замены мы используем массив шаблонов и заменяющий массив, что приводит к обрезке дополнительных шаблонов L
и R
.
Если вам нужно также удалить
.
$data = trim(preg_replace('/\s+|nbsp;/g', '', $data));
Просто используйте это регулярное выражение
$str = trim(preg_replace('/\s\s+/', ' ', $str));
он заменит все вкладки и пробелы на одно пространство,
здесь знак +
в регулярном выражении означает один или несколько раз,
шаблон означает, что везде, где есть два или более пробелов, замените его на одно пространство