2012-05-18 69 views
6

Tôi muốn xóa các dòng trống thừa khỏi một chuỗi nhưng cho phép một dòng trống giữa mỗi dòng. Giống như:Xóa các dòng trống khỏi chuỗi, nhưng cho phép một dòng trống giữa mỗi dòng

line1 





line2 

Sẽ trở thành:

line1 

line2 

tôi đã tìm ra regex sau (quên nơi tôi tìm thấy nó):

preg_replace('/^\n+|^[\t\s]*\n+/m','',$message); 

này hoạt động, nhưng loại bỏ tất cả các dòng sản phẩm nào mà không để lại một dòng trống giữa mỗi dòng.

Edit: Tôi vừa tạo một ví dụ nhanh tại http://jsfiddle.net/RAqSS/

+0

Ý của bạn là: "Sẽ trở thành: line1 \ n \ n dòng2"? –

+0

Về cơ bản, nếu có nhiều hơn 2 dòng trống giữa mỗi dòng, nó sẽ được cắt xuống chỉ một. Vì vậy, về cơ bản, dòng trống còn lại phải cao tới 1 em. – Sempiterna

+0

Tôi nghĩ bạn cần phải xác định ý nghĩa của từ 'dòng trống'. Những gì bạn mô tả trong câu hỏi không phải là một dòng trống. –

Trả lời

6

Hãy thử thay thế:

\n(\s*\n){2,} 

với:

\n\n 

Như thế này:

preg_replace('/\n(\s*\n){2,}/', "\n\n", $message); // Quotes are important here. 

Nếu bạn không muốn một dòng trống, bạn sẽ thay đổi {2,} đến một + và sử dụng một đơn \n. Nó thực sự sẽ hoạt động với một + thay vì {2,}. {2,} là một tối ưu hóa.

+0

Có, điều này hoạt động chính xác như tôi muốn. Cảm ơn bạn rất nhiều! :) – Sempiterna

+1

Cái này hoạt động chính xác!Nếu bạn không muốn dòng trống, bạn sẽ sử dụng đoạn mã sau: 'preg_replace ('/ \ n (\ s * \ n) + /'," \ n ", $ đầu ra);' – Devner

4

Hãy thử như sau:

preg_replace('/\n(\s*\n)+/', "\n\n", $message); 

này sẽ thay thế một dòng mới tiếp theo bất kỳ số lượng các dòng trống với một dòng mới duy nhất.

+0

Điều đó không hiệu quả. Nó bằng cách nào đó loại bỏ tất cả nội dung, để lại một chuỗi rỗng. – Sempiterna

+0

''\ n'' không phải là một dòng mới. –

+0

@KendallFrey - Cảm ơn, ban đầu OP đã yêu cầu 'line \ nline2' nhưng có vẻ như bạn đang diễn giải nó một cách chính xác dựa trên jsfiddle. –

0

Dựa trên jsFiddle của bạn, hãy thử này:

$result = preg_replace('/\n(\n*\s)+/', "\n\n", $message); 
+0

Mã thứ hai của bạn hầu như hoạt động . Nó thay thế tất cả các dòng trống và thay thế chúng bằng một dòng trống giữa mỗi phần văn bản. Nhưng nó cũng thêm một dòng trống giữa mỗi phần văn bản không có nhiều dòng trống. – Sempiterna

+0

Bạn có thể cập nhật câu hỏi của mình với ví dụ chi tiết hơn về dữ liệu và kết quả mong đợi không? – sudoash

Các vấn đề liên quan