Tôi khá chắc chắn tôi đã thấy “\R
được giới thiệu vào Ruby2 để phù hợp với dòng mới, mặc dù nơi họ đến từ: unix \n
, macos \r
hay cửa sổ \r\n
” đâu đó . Điều đó nói rằng, Ruby2 nên xử lý \R
như %r{\r\n|\r|\n}
.của Ruby regex 'xuyệc ngược R' aka ' R' mẫu
này hoạt động tốt:
▶ "a\nb".match /\R/
#⇒ #<MatchData "\n">
▶ "a\rb".match /\R/
#⇒ #<MatchData "\r">
▶ "a\r\nb".match /\R/
#⇒ #<MatchData "\r\n">
thậm chí cho dù kết thúc dòng/thức ăn được kết hợp:
▶ "a\r\n\nb".match /\R{2}/
#⇒ #<MatchData "\r\n\n">
trừ khi một cố gắng phủ nhận \R
:
▶ "a\nb".match /[^\R]+/
#⇒ #<MatchData "a\nb">
Làm giảm \n
hoạt động tốt mặc dù :
▶ "a\nb".match /[^\n]+/
#⇒ #<MatchData "a">
Thật không may, \R
cực kỳ khó khăn đối với google. Không phải Regexp
rdoc cũng không phải Regular Expressions có đề cập đến nó.
Liệu có bất kỳ chuyên gia regex nào có giải thích ở đây, để ít nhất nó dễ dàng được googled?
Xin cảm ơn trước.
Sau khi đọc lời giải thích của @ sawa, điều này có vẻ hoàn toàn hợp lý, tôi tự hỏi nếu điều này có thể là một lỗi. Dường như với tôi rằng ''a \ nb' .match/[^ \ R] + /' sẽ hoạt động theo cách bạn mong đợi. Tôi đã bỏ email đến [K. Takata] (https://github.com/k-takata) yêu cầu anh/cô ấy xem xét câu hỏi của bạn. –
@CarySwoveland Cảm ơn vì điều đó. Mặt khác, tôi không nghĩ rằng sự tách rời các biểu thức nguyên tử có thể [dễ dàng] phủ nhận. Chúng tôi chỉ đơn giản không nên mong đợi hành vi chính xác bên trong dấu ngoặc vuông từ không phải chữ, chính xác như chúng tôi không mong đợi các tham chiếu ngược (có vẻ gần như cùng một ký hiệu) để hoạt động đúng trong nhóm ký tự. – mudasobwa