2010-09-21 7 views
43

Đây có thể không hoàn toàn là câu hỏi bạn đang mong đợi! Tôi không muốn một regex mà sẽ phù hợp trên dòng-break; thay vào đó, tôi muốn viết một regex dài, để dễ đọc, tôi muốn chia thành nhiều dòng mã.Chia Ruby regex qua nhiều dòng

Cái gì như:

"bar" =~ /(foo| 
      bar)/ # Doesn't work! 
# => nil. Would like => 0 

Có thể nó được thực hiện?

Trả lời

37

Bạn cần sử dụng công cụ sửa đổi /x, cho phép free-spacing mode.

+24

Câu trả lời này có thể được cải thiện bằng cách thay thế liên kết với một lời giải thích chi tiết hơn. – mkataja

2

bạn có thể sử dụng:

"bar" =~ /(?x)foo| 
     bar/ 
+6

Câu trả lời này hữu ích cho tình huống của tôi, nhưng chỉ sau khi tôi tìm kiếm ý nghĩa (? X) và có thể thêm nhiều ngữ cảnh hơn. Tôi sẽ được tốt đẹp nếu câu trả lời này đã được cập nhật để được rõ ràng hơn về những gì nó minh họa. Đối với những người khác quan tâm, tôi thấy các ghi chú về cấu trúc (? On-off) ở đây hữu ích: http://ruby-doc.org/core-1.9.3/Regexp.html#class-Regexp-label-Options –

+0

@BenParizek Có lẽ bạn có thể thêm một lời giải thích ngắn ở đây làm bình luận? –

+0

Tôi không có chuyên gia về chủ đề này nhưng khi tôi hiểu nó, hầu hết các câu trả lời ở đây đang nói các phiên bản khác nhau của cùng một điều. Vấn đề là các regex phức tạp khó đọc. Câu trả lời chung là: bạn có thể bật chế độ khoảng trống miễn phí để giúp làm cho các regex dễ đọc hơn. Có nhiều cách khác nhau để bạn có thể bật chế độ khoảng trống miễn phí. 1) Bạn có thể thêm công cụ sửa đổi sau dấu phân tách cuối '/ myregex/x', 2), bạn có thể chuyển đổi chế độ giãn cách tự do dọc theo cách sử dụng cấu trúc (? On-off)'/myregex (? X) với khoảng cách tự do/', 3) bạn có thể sử dụng cú pháp'% r {myregex} x'. –

78

Sử dụng% r với các tùy chọn x là cách ưa thích để làm điều này.

Xem ví dụ này từ hướng dẫn github ruby ​​phong cách

regexp = %r{ 
    start   # some text 
    \s   # white space char 
    (group)  # first group 
    (?:alt1|alt2) # some alternation 
    end 
}x 

https://github.com/styleguide/ruby

+2

Ví dụ để làm theo. Bình luận bên trong regex làm điều kỳ diệu để bảo trì. –

+3

Hoặc với/thay vì% r, bởi vì rubocop phàn nàn nếu regex không nằm giữa các dấu gạch chéo. Ngoài ra hướng dẫn phong cách của họ mà khuyến cáo nó như thế: https://github.com/bbatsov/ruby-style-guide#regular-expressions – ytg