Hướng Dẫn Tìm Hiểu Biểu Thức Chính Quy Trong Java

Thảo luận trong 'Học tập' bởi nuongitq, 3/12/2015.

  1. nuongitq

    nuongitq Thành viên đạt chuẩn

    Tham gia:
    5/8/2014
    Bài viết:
    73
    Đã được thích:
    8
    Điểm thành tích:
    8
    Để tìm ra bao nhiêu nhóm có mặt trong biểu thức, gọi phương thức groupCount trên một đối tượng khớp. Phương pháp groupCount trả về một int cho biết số chụp nhóm hiện diện trong mô hình của khớp.

    Ngoài ra còn có một nhóm đặc biệt, nhóm 0, mà luôn luôn đại diện cho toàn bộ biểu thức. Nhóm này không bao gồm trong báo cáo của tổng groupCount.

    Ví dụ:
    Ví dụ sau đây minh họa làm thế nào để tìm thấy một chuỗi chữ số từ chuỗi chữ số được đưa ra:
    Code:
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexMatches
    {
        public static void main( String args[] ){
    
          // String to be scanned to find the pattern.
          String line = "This order was placed for QT3000! OK?";
          String pattern = "(.*)(\\d+)(.*)";
    
          // Create a Pattern object
          Pattern r = Pattern.compile(pattern);
    
          // Now create matcher object.
          Matcher m = r.matcher(line);
          if (m.find( )) {
             System.out.println("Found value: " + m.group(0) );
             System.out.println("Found value: " + m.group(1) );
             System.out.println("Found value: " + m.group(2) );
          } else {
             System.out.println("NO MATCH");
          }
       }
    }
    This would produce the following result:
    Code:
    Found value: This order was placed for QT3000! OK?
    Found value: This order was placed for QT300
    Found value: 0
    Regular Expression Cú pháp:
    Dưới đây là bảng liệt kê toàn bộ thường xuyên cú pháp metacharater biểu hiện có sẵn trong Java:

    Kết quả các trận subexpression
    ^ Kết quả các trận đầu dòng.
    $ Trận đấu cuối dòng.
    . Khớp với bất kỳ ký tự đơn trừ xuống dòng. Sử dụng tùy chọn m cho phép nó để phù hợp với dòng mới là tốt.
    [...] Ghép các ký tự đơn trong ngoặc đơn.
    [^ ...] Ghép các ký tự đơn lẻ không ở trong ngoặc
    \ A Beginning của toàn bộ chuỗi
    \ z End của toàn bộ chuỗi
    \ Z End của toàn bộ chuỗi trừ phép thức dòng terminator.
    * Kết quả các trận tái 0 hoặc nhiều lần xuất hiện của các biểu hiện trước.
    tái + Trận đấu 1 hoặc nhiều điều trước
    lại? Kết quả các trận 0 hoặc 1 xảy ra trước biểu hiện.
    tái {n} Kết hợp chính xác số n lần xuất hiện của biểu hiện trước.
    tái {n,} Kết quả các trận n hoặc nhiều lần xuất hiện của các biểu hiện trước.
    tái {n, m} Trận đấu ít nhất n và tại hầu hết các lần xuất hiện của m trước biểu hiện.
    a | b các trận đấu hoặc một hoặc b.
    (lại) Nhóm biểu thức thông thường và nhớ lại văn bản phù hợp.
    (?: Tái) Nhóm biểu thức thông thường mà không cần ghi nhớ văn bản phù hợp.
    (?> Re) Kết quả các trận mô hình độc lập mà không cần quay lui.
    \ w Kết quả các trận ký tự từ.
    \ W Kết quả các trận ký tự nonword.
    \ s các trận đấu khoảng trắng. Tương đương với [\ t \ n \ r \ f].
    \ S quả các trận đấu nonwhitespace.
    \ d Kết quả các trận chữ số. Tương đương với [0-9].
    \ D Kết quả các trận nondigits.
    \ A Kết quả các trận đầu của chuỗi.
    \ Z Trận đấu kết thúc chuỗi. Nếu một dòng mới tồn tại, nó phù hợp ngay trước khi xuống dòng.
    \ z quả các trận đấu cuối của chuỗi.
    \ G quả các trận đấu điểm mà trận đấu cuối cùng kết thúc.
    \ n Back-tài liệu tham khảo để nắm bắt số nhóm "n"
    \ b Kết quả các trận ranh giới từ khi khung bên ngoài. Kết quả các trận phím lùi (0x08) khi bên trong dấu ngoặc đơn.
    \ B Trận đấu ranh giới nonword.
    \ n, \ t, vv Kết quả các trận dòng mới, trả về vận chuyển, các tab, vv
    \ Q Escape (quote) tất cả các nhân vật lên đến \ E
    \ E Kết thúc trích dẫn bắt đầu với \ Q

    >> Khóa học lập trình android cơ bản tại hà nội


    Các phương thức của lớp Matcher:
    Dưới đây là một danh sách các phương pháp dụ hữu ích:

    Phương pháp chỉ số:
    Phương pháp chỉ số cung cấp các giá trị chỉ số hữu ích cho thấy chính xác nơi mà trận đấu đã được tìm thấy trong chuỗi đầu vào:

    Phương pháp SN với Mô tả
    1 public int start ()
    Trả về chỉ số bắt đầu của trận đấu trước đó.

    2 public int start (int nhóm)
    Trả về chỉ số bắt đầu của dãy con bị bắt bởi các nhóm đưa ra trong các hoạt động trận đấu trước đó.

    3 công int end ()
    Trả về bù đắp sau khi cuối cùng phù hợp.

    4 công int end (int nhóm)
    Trả về bù đắp sau khi ký tự cuối cùng của dãy con bị bắt bởi các nhóm đưa ra trong các hoạt động trận đấu trước đó.

    Phương pháp nghiên cứu:
    Phương pháp nghiên cứu xem xét các chuỗi đầu vào và trả về một Boolean cho biết có hay không mô hình được tìm thấy:

    Phương pháp SN với Mô tả
    1 công lookingAt boolean ()
    Những cố gắng để phù hợp với trình tự đầu vào, bắt đầu vào lúc bắt đầu của khu vực, chống lại các mô hình.

    2 công boolean find ()
    Thử tìm chuỗi tiếp theo của chuỗi đầu vào phù hợp với mô hình.

    3 công boolean find (int start)
    Reset matcher này và sau đó cố gắng để tìm chuỗi tiếp theo của chuỗi đầu vào phù hợp với mô hình, bắt đầu từ chỉ số xác định.

    4 trận đấu public boolean ()
    Cố gắng để phù hợp với toàn bộ khu vực chống lại các mô hình.

    Phương pháp thay thế:
    Phương pháp thay thế là phương pháp hữu ích để thay thế văn bản trong một chuỗi đầu vào:

    Phương pháp SN với Mô tả
    1 công Matcher appendReplacement (StringBuffer sb, String thay thế)
    Thực hiện một append-và-thay thế bước phi-terminal.

    2 công StringBuffer appendTail (StringBuffer sb)
    Thực hiện một thiết bị đầu cuối nối thêm và thay thế bước.

    3 public String replaceAll (String thay thế)
    Thay thế mỗi dãy con của dãy đầu vào phù hợp với mô hình các chuỗi thay thế được.

    4 public String replaceFirst (String thay thế)
    Thay thế dãy đầu tiên của chuỗi đầu vào phù hợp với mô hình các chuỗi thay thế được.

    5 tĩnh public String quoteReplacement (String s)
    Trả về một chuỗi thay thế chữ String quy định. Phương pháp này tạo ra một String sẽ làm việc như một s thay thế chữ trong các phương pháp appendReplacement của lớp Matcher.

    Sự bắt đầu và kết thúc Phương pháp:
    Sau đây là những ví dụ mà đếm số lần các từ "mèo" xuất hiện trong chuỗi đầu vào:
    Code:
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexMatches
    {
        private static final String REGEX = "\\bcat\\b";
        private static final String INPUT =
                                        "cat cat cat cattie cat";
    
        public static void main( String args[] ){
           Pattern p = Pattern.compile(REGEX);
           Matcher m = p.matcher(INPUT); // get a matcher object
           int count = 0;
    
           while(m.find()) {
             count++;
             System.out.println("Match number "+count);
             System.out.println("start(): "+m.start());
             System.out.println("end(): "+m.end());
          }
       }
    }
    This would produce the following result:
    Code:
    atch number 1
    start(): 0
    end(): 3
    atch number 2
    start(): 4
    end(): 7
    atch number 3
    start(): 8
    end(): 11
    atch number 4
    start(): 19
    end(): 22
    Bạn có thể thấy rằng ví dụ này sử dụng ranh giới từ để đảm bảo rằng các chữ "c" "a" "t" không chỉ đơn thuần là một chuỗi con trong một từ dài hơn. Nó cũng cung cấp một số thông tin hữu ích về đâu trong chuỗi đầu vào trận đấu đã xảy ra.

    Các phương pháp bắt đầu trả về chỉ số bắt đầu của dãy con bị bắt bởi các nhóm đưa ra trong các hoạt động trận đấu trước đó, và cuối cùng trả về chỉ số của nhân vật cuối cùng xuất hiện, cộng với một.

    Các trận đấu và phương pháp lookingAt:
    Các trận đấu và phương pháp lookingAt cả nỗ lực để phù hợp với một chuỗi đầu vào đối với một mô hình. Sự khác biệt, tuy nhiên, đó là trận đấu đòi hỏi toàn bộ chuỗi đầu vào để được xuất hiện, trong khi lookingAt không.

    Cả hai phương pháp luôn luôn bắt đầu vào đầu của chuỗi nhập vào. Dưới đây là ví dụ giải thích các chức năng:

    Code:
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexMatches
    {
        private static final String REGEX = "foo";
        private static final String INPUT = "fooooooooooooooooo";
        private static Pattern pattern;
        private static Matcher matcher;
    
        public static void main( String args[] ){
           pattern = Pattern.compile(REGEX);
           matcher = pattern.matcher(INPUT);
    
           System.out.println("Current REGEX is: "+REGEX);
           System.out.println("Current INPUT is: "+INPUT);
    
           System.out.println("lookingAt(): "+matcher.lookingAt());
           System.out.println("matches(): "+matcher.matches());
       }
    }
    This would produce the following result:
    Code:
    Current REGEX is: foo
    Current INPUT is: fooooooooooooooooo
    lookingAt(): true
    matches(): false
    Các replaceFirst và replaceAll Phương pháp:
    Các replaceFirst và replaceAll phương pháp thay thế văn bản phù hợp với một biểu thức chính quy định. Như tên cho thấy, replaceFirst thay thế sự xuất hiện đầu tiên, và replaceAll thay thế tất cả các trường.

    Dưới đây là ví dụ giải thích các chức năng:
    Code:
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexMatches
    {
        private static String REGEX = "dog";
        private static String INPUT = "The dog says meow. " +
                                        "All dogs say meow.";
        private static String REPLACE = "cat";
    
        public static void main(String[] args) {
           Pattern p = Pattern.compile(REGEX);
           // get a matcher object
           Matcher m = p.matcher(INPUT);
           INPUT = m.replaceAll(REPLACE);
           System.out.println(INPUT);
       }
    }
    Điều này sẽ tạo ra các kết quả sau đây:

    Con mèo nói meo meo. Tất cả những con mèo nói meo meo.
    Các appendReplacement và appendTail Phương pháp:
    Lớp Matcher cũng cung cấp appendReplacement và appendTail phương pháp để thay thế văn bản.

    Dưới đây là ví dụ giải thích các chức năng:
    Code:
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class RegexMatches
    {
       private static String REGEX = "a*b";
       private static String INPUT = "aabfooaabfooabfoob";
       private static String REPLACE = "-";
       public static void main(String[] args) {
          Pattern p = Pattern.compile(REGEX);
          // get a matcher object
          Matcher m = p.matcher(INPUT);
          StringBuffer sb = new StringBuffer();
          while(m.find()){
             m.appendReplacement(sb,REPLACE);
          }
          m.appendTail(sb);
          System.out.println(sb.toString());
       }
    }
    Điều này sẽ tạo ra các kết quả sau đây:

    -foo-foo-foo-
    PatternSyntaxException Phương Class:
    Một PatternSyntaxException là một ngoại lệ không được kiểm soát mà chỉ ra một lỗi cú pháp trong một mô hình biểu hiện thường xuyên. Lớp PatternSyntaxException cung cấp các phương pháp sau đây để giúp bạn xác định những gì đã đi sai:

    Phương pháp SN với Mô tả
    1 public String getDescription ()
    Lấy các mô tả về lỗi.

    2 public int getIndex ()
    Lấy chỉ số lỗi.

    3 public String getPattern ()
    Lấy mẫu thường xuyên biểu hiện sai lầm.

    4 public String getMessage ()
    Trả về một chuỗi đa dòng có chứa các mô tả về lỗi cú pháp và chỉ số của nó, mô hình biểu hiện thường xuyên sai lầm, và một chỉ thị giác của chỉ số lỗi trong mô hình.

    >> Khóa học photoshop cơ bản tại hà nội
     

    Xem thêm các chủ đề tạo bởi nuongitq
    Đang tải...


Chia sẻ trang này