2013-03-29 34 views
6

Tôi cố gắng để làm một cái gì đó như sau:Scala sánh chữ trên regex trực tiếp

list.foreach {x => 
    x match { 
     case """TEST: .*""" => println("TEST") 
     case """OXF.*""" => println("XXX") 
     case _    => println("NO MATCHING") 
    } 
} 

Ý tưởng là để sử dụng nó như groovy trường hợp chuyển đổi trận đấu regex. Nhưng tôi dường như không thể biên dịch được. Whats đúng cách để làm điều đó trong scala?

Trả lời

16

Bạn có thể đối sánh với cụm từ thông dụng được biên dịch trước (như trong trường hợp đầu tiên bên dưới) hoặc thêm mệnh đề if . Lưu ý rằng bạn thường không muốn biên dịch lại cùng một biểu thức chính quy trên mỗi đánh giá case, nhưng thay vào đó có nó trên một đối tượng.

val list = List("Not a match", "TEST: yes", "OXFORD") 
    val testRegex = """TEST: .*""".r 
    list.foreach { x => 
    x match { 
     case testRegex() => println("TEST") 
     case s if s.matches("""OXF.*""") => println("XXX") 
     case _ => println("NO MATCHING") 
    } 
    } 

Xem thêm thông tin here và một số nền here.

+1

Tôi muốn scala thêm đường cú pháp để xử lý việc này, tôi không thích các mã bổ sung cho phù hợp với regex đơn giản hơn. Sau khi dành một chút thời gian để tìm hiểu làm thế nào để làm điều đó, tôi không thể tin rằng nó không thể làm được trong Scala do đó các bài StackOverflow! – Sajid

+1

sử dụng 'val testRegex =" "" KIỂM TRA: (. *) "" ". R' và' case testRegex (m) => println ("TEST" + m) 'để nắm bắt kết quả phù hợp – Renaud

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