Этот ответ воспринимает вопрос буквально: он касается только пробелов и вкладок. Конечно, 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
экранирующие символы, чтобы указать начало и конец предмета вместо типичных ^
и $
, ориентированных на строку мета- символов. Это не столько потому, что они нужны в данном случае, сколько для «защитного» программирования, если значение S
изменится, чтобы сделать их необходимыми в будущем.
Теперь секретный соус: мы воспользуемся особой семантикой preg_replace., а именно (выделение добавлено)
Если в замещающем массиве меньше элементов, чем в массиве шаблонов, все лишние шаблоны будут заменены пустой строкой.
function trim_press( $data ){
return preg_replace( [ M, L, R ], [ T ], $data );
}
Таким образом, вместо строки шаблона и строки замены мы используем массив шаблонов и массив замещений, в результате чего лишние шаблоны L
и R
обрезаются.
person
Jeff
schedule
03.10.2017