giải pháp ereg-replace()
của bạn là sai vì ereg/eregi
phương pháp không được tán thành. preg_replace()
của bạn thậm chí sẽ không biên dịch, nhưng nếu bạn thêm delimiters và thiết lập chế độ multiline, nó sẽ hoạt động tốt:
$str = preg_replace('/^[ \t]*[\r\n]+/m', '', $str);
Các modifier m
phép ^
để phù hợp với sự bắt đầu của một dòng logic chứ không phải chỉ là khởi đầu của toàn bộ chuỗi. Neo bắt đầu của dòng là cần thiết bởi vì không có nó regex sẽ phù hợp với dòng mới ở cuối mỗi dòng, không chỉ là những cái trống. Bạn không cần neo cuối dòng ($
) vì bạn đang tích cực khớp với các ký tự dòng mới, nhưng nó không bị tổn thương.
accepted answer hoàn thành công việc, nhưng nó phức tạp hơn mức cần thiết. Regex phải khớp với phần đầu của chuỗi (^[\r\n]*
, chế độ đa dòng không được đặt) hoặc ít nhất một dòng mới ([\r\n]+
), theo sau là ít nhất một dòng mới ([\r\n]+
). Vì vậy, trong trường hợp đặc biệt của chuỗi bắt đầu bằng một hoặc nhiều dòng trống, chúng sẽ được thay thế bằng một dòng trống. Tôi khá chắc chắn đó không phải là kết quả mong muốn.
Nhưng phần lớn thời gian là thay thế hai hoặc nhiều dòng mới liên tiếp, cùng với bất kỳ dấu cách ngang nào (dấu cách hoặc tab) nằm giữa chúng, với một dòng cấp. Đó là ý định, dù sao đi nữa. Tác giả dường như mong đợi \s
để chỉ khớp với ký tự khoảng trắng (\x20
), khi thực tế nó khớp với bất kỳ ký tự khoảng trống nào. Đó là một sai lầm rất phổ biến. Danh sách thực tế thay đổi từ một hương vị regex sang vị trí tiếp theo, nhưng tối thiểu bạn có thể mong đợi \s
để khớp với bất kỳ kết quả nào phù hợp với [ \t\f\r\n]
.
Trên thực tế, trong PHP bạn có một lựa chọn tốt hơn:
$str = preg_replace('/^\h*\v+/m', '', $str);
\h
phù hợp với bất kỳ ký tự khoảng trắng ngang, và \v
trận dọc khoảng trắng.
Nguồn
2009-04-02 18:18:14
này cũng được tìm thấy ở đây: http://programming-oneliners.blogspot.com/2006/03/remove-blank-empty-lines-php-29.html – Jamie
trở preg_replace ("/ (^ [ \ r \ n] * | [\ r \ n] +) [\ s \ t] * [\ r \ n] +/"," \ n ", $ string); công việc này – StoneHeart
Bạn có thể giải thích chính xác những gì regex không? Tôi không thích sử dụng mã mà tôi không biết gì cả. – Achshar