2012-08-13 35 views
7

Tôi đã xem xét một số mã jdk. Tôi tìm thấy những nhân vật này. Ai đó có thể giải thích cho tôi những gì có ý nghĩa.Các ký tự đặc biệt này có ý nghĩa gì trong Java?

public static String quote(String s) { 
    int slashEIndex = s.indexOf("\\E");  // What does this mean. Is this a special char in java. if so what does this do. 
    if (slashEIndex == -1) 
     return "\\Q" + s + "\\E";   

    StringBuilder sb = new StringBuilder(s.length() * 2); 
    sb.append("\\Q"); 
    slashEIndex = 0; 
    int current = 0; 
    while ((slashEIndex = s.indexOf("\\E", current)) != -1) { 
     sb.append(s.substring(current, slashEIndex)); 
     current = slashEIndex + 2; 
     sb.append("\\E\\\\E\\Q"); 
    } 
    sb.append(s.substring(current, s.length())); 
    sb.append("\\E"); 
    return sb.toString(); 
} 

Từ ví dụ mã trên tôi đã có thể tìm ra những gì đang xảy ra như trong phương pháp tìm lần xuất hiện của \ và chuyển đổi chúng sang \ E và \ Q. Ai đó có thể giải thích lý do tại sao vậy.

Đối với bối cảnh thêm về phương pháp này, tôi đã nhìn vào phương pháp Pattern.quote() từ jdk 1.6

+0

Mã này dường như [cất thẳng từ các nguồn Java] (http://www.docjar.com/html/api/java /util/regex/Pattern.java.html) ('Pattern.java', dòng 1276..1293). – dasblinkenlight

+0

Có từ nguồn jdk Pattern.java – JourneyMan

Trả lời

2

Vâng, \Q\E có một ý nghĩa đặc biệt trong Java regular expressions ...

Hầu hết các phương pháp này chỉ hoạt động trên trường hợp phức tạp của việc trích dẫn các dấu ngoặc kép tự đánh dấu các dấu ngoặc kép \Q\E.

4

Khối động cơ regex Java giải thích đặc biệt tất cả các ký tự meta giữa \Q\E. Ví dụ, [name] phù hợp với một nhân vật duy nhất ('n', 'a', 'm', hoặc 'e'), trong khi \Q[name]\E phù hợp với sáu nhân vật - '[', 'n', 'a', 'm', 'e'']'. Xem các ký tự đặc biệt của regex tutorial để biết thêm chi tiết.

Phương thức tạo biểu thức chính quy từ chuỗi được cho là được cung cấp bên ngoài (ví dụ: được người dùng nhập). Vì chuỗi có thể chứa các ký tự meta, phương thức bao quanh toàn bộ chuỗi trong \Q\E. Nếu chuỗi đã có chứa một \E, phương pháp chèn phần cuối của báo giá, một trận đấu của \E, và một sự khởi đầu của một báo giá mới cho mỗi \E mà nó tìm thấy ..

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