Hãy kiểm tra xem động cơ regex của bạn có hỗ trợ \R
làm lớp ký tự viết tắt và bạn sẽ không cần phải quan tâm đến các combo khác nhau của newline/linefeed Unicode. Nếu được triển khai chính xác, sau đó bạn có thể đối sánh tất cả các kết thúc dòng ascii hoặc Unicode khác nhau một cách rõ ràng bằng cách sử dụng \R
.
Trong Unicode, bạn cần phát hiện NEL
(Dòng kết thúc OS/390, \ x85) LS
(Bộ tách dòng, \ x2028) và PS
(Tách đoạn, \ x2029) nếu bạn muốn hoàn toàn nền tảng trong những ngày này.
Có thể gây tranh cãi cho dù LS, NEL và PS có được coi là ngắt dòng, kết thúc dòng hay không gian màu trắng. Tiêu chuẩn XML 1.0, ví dụ: does not recognize NEL là ký tự ngắt dòng. ECMAScript xử lý LS
và PS
làm ngắt dòng nhưng NEL
làm khoảng trắng. Perl unicode regexs sẽ đối xử với VT
, FF
, CR
, CRLF
, NEL
, LS
và PS
như ngắt dòng với mục đích ^
và $
ký tự meta regex.
Các Unicode Implementation Guide (mục 5.8 và bảng 5.3) có lẽ là đặt cược tốt nhất về việc xử lý dứt khoát của "đường kẻ mới" là gì.
Nếu bạn chỉ quan tâm đến ascii với các biến thể cổ điển DOS/Windows/Unix/Mac, regex tương đương với \R
là (?>\r\n|[\r\n])
Trong Unicode, tương đương với \R
là (?>\r\n|\n|\x0b|\f|\r|\x85|\x2028|\x2029)
Các \x0b
trong đó là một dọc chuyển hướng; một lần nữa, điều này có thể hoặc có thể không phù hợp với bạn định nghĩa về những gì một ngắt dòng là, nhưng điều đó không phù hợp với khuyến nghị của Unicode Implantation. (FF
hoặc \x0C
không được bao gồm trong regex vì Nguồn cấp dữ liệu là trang mới, không phải là dòng mới trong định nghĩa.)
bạn có quan tâm đến ngắt dòng-Mac kiểu cũ ('\ r'), hoặc chỉ về Unix và Windows (' \ n' và '\ r \ n')? –
có thể trùng lặp của [Cụm từ thông dụng để khớp với các ký tự dòng mới trên nền tảng chéo] (http://stackoverflow.com/questions/1331815/regular-expression-to-match-cross-platform-newline-characters) – Amarghosh