Câu trả lời này có nghĩa hoàn toàn là: chỉ liên quan đến không gian và tab. Được cấp, OP có lẽ cũng muốn bao gồm các loại khoảng trắng khác trong những gì được cắt/nén, nhưng giả sử anh ta muốn giữ lại được nhúng CR và/hoặc LF.
Trước tiên, hãy thiết lập một số hằng số. Điều này sẽ cho phép cả hai dễ hiểu và dễ bảo trì, nên các sửa đổi trở nên cần thiết. Tôi đưa vào một số không gian phụ để bạn có thể so sánh các điểm tương đồng và khác biệt dễ dàng hơn.
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
Chúng tôi đang sử dụng \A
và \Z
escape characters để xác định đầu và cuối của đối tượng, thay vì tiêu biểu ^
và $
đó là dòng hướng meta-characters. Điều này không quá nhiều vì chúng cần thiết trong trường hợp này nhiều như lập trình "phòng thủ", nên giá trị của S
thay đổi để làm cho chúng cần thiết trong tương lai.
Bây giờ cho các nước sốt bí mật: chúng ta sẽ tận dụng lợi thế của một số ngữ nghĩa đặc biệt của preg_replace, cụ thể là (nhấn mạnh thêm)
Nếu có ít yếu tố trong việc thay thế mảng hơn trong mảng mẫu, mọi mẫu phụ sẽ được thay thế bằng một chuỗi rỗng.
function trim_press($data){
return preg_replace([ M, L, R ], [ T ], $data);
}
Vì vậy, thay vì một mô hình chuỗi và chuỗi thay thế, chúng tôi đang sử dụng một mảng hoa văn và thay thế mảng, mà kết quả trong các mô hình phụ L
và R
được tỉa.
Bạn đang cố gắng loại bỏ tất cả * tab bất kể hoặc bạn có mong muốn duy trì định dạng cột không? – Synetech
Tôi nghĩ bạn nên đánh giá lại câu trả lời và chấp nhận câu trả lời khác. – Jeff