ảnh minh họa |
Cụm từ thông dụng là chuỗi ký tự đặc biệt giúp bạn khớp hoặc tìm các chuỗi hoặc bộ chuỗi khác bằng cách sử dụng cú pháp chuyên biệt được giữ trong mẫu. Chúng có thể được sử dụng để tìm kiếm, chỉnh sửa hoặc thao tác văn bản và dữ liệu.
Gói java.util.regex chủ yếu bao gồm ba lớp sau:
Pattern Class - Một đối tượng Pattern là một biểu diễn được biên dịch của một biểu thức chính quy. Lớp Pattern không cung cấp các hàm tạo công khai. Để tạo một mẫu, trước tiên bạn phải gọi một trong các phương thức biên dịch tĩnh công khai của nó , sau đó sẽ trả về một đối tượng Pattern. Các phương thức này chấp nhận một biểu thức chính quy làm đối số đầu tiên.
Lớp đối sánh - Đối tượng Matcher là công cụ diễn giải mẫu và thực hiện các phép toán khớp với chuỗi đầu vào. Giống như lớp Pattern, Matcher định nghĩa không có các hàm tạo công khai nào. Bạn có được một đối tượng Matcher bằng cách gọi phương thức matcher () trên một đối tượng Pattern.
PatternSyntaxException - Một đối tượng PatternSyntaxException là một ngoại lệ không được kiểm tra cho biết một lỗi cú pháp trong một mẫu biểu thức chính quy.
Chụp nhóm
Chụp nhóm là cách để xử lý nhiều ký tự dưới dạng một đơn vị. Chúng được tạo ra bằng cách đặt các ký tự được nhóm lại bên trong một tập hợp các dấu ngoặc đơn. Ví dụ: biểu thức chính quy (dog) tạo một nhóm chứa các chữ "d", "o" và "g".Các nhóm chụp được đánh số bằng cách đếm dấu ngoặc đơn mở của chúng từ trái sang phải. Trong biểu thức ((A) (B (C))), ví dụ, có bốn nhóm như vậy -
((A) (B (C)))
(A)
(B (C))
(C)
Để tìm hiểu có bao nhiêu nhóm có mặt trong biểu thức, hãy gọi phương thức groupCount trên đối tượng đối sánh. Phương thức groupCount trả về một inthiển thị số lượng các nhóm chụp có trong mẫu của đối sánh.
Ngoài ra còn có một nhóm đặc biệt, nhóm 0, luôn đại diện cho toàn bộ biểu thức. Nhóm này không được bao gồm trong tổng số được báo cáo bởi groupCount.
Thí dụ
Ví dụ sau minh họa cách tìm chuỗi chữ số từ chuỗi ký tự chữ và số -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"); } } }Điều này sẽ tạo ra kết quả sau
Đầu ra
Found value: This order was placed for QT3000! OK? Found value: This order was placed for QT300 Found value: 0
Cú pháp biểu thức chính quy
Dưới đây là bảng liệt kê tất cả cú pháp metacharacter biểu thức chính quy có sẵn trong JavaSubexpression | Kết quả phù hợp |
---|---|
^ | Phù hợp với sự bắt đầu của dòng. |
$ | Phù hợp với kết thúc của dòng. |
. | Khớp với bất kỳ ký tự đơn nào ngoại trừ dòng mới. Sử dụng tùy chọn m cho phép nó khớp với dòng mới. |
[...] | Phù hợp với bất kỳ ký tự đơn nào trong dấu ngoặc đơn. |
[^ ...] | Khớp với bất kỳ ký tự đơn nào không nằm trong dấu ngoặc đơn. |
\ A | Bắt đầu toàn bộ chuỗi. |
\ z | Kết thúc toàn bộ chuỗi. |
\ Z | Kết thúc của toàn bộ chuỗi ngoại trừ terminator cuối cùng cho phép. |
re * | Khớp với 0 hoặc nhiều lần xuất hiện của biểu thức trước. |
re + | Phù hợp với 1 hoặc nhiều điều trước đó. |
lại? | Phù hợp với 0 hoặc 1 lần xuất hiện của biểu thức trước. |
re {n} | Kết hợp chính xác n số lần xuất hiện của biểu thức trước. |
re {n,} | Khớp với n hoặc nhiều lần xuất hiện của biểu thức trước. |
re {n, m} | Khớp với ít nhất n và nhiều nhất là các lần xuất hiện m của biểu thức trước. |
a | b | Các trận đấu a hoặc b. |
(lại) | Nhóm biểu thức chính quy và ghi nhớ văn bản phù hợp. |
(?: lại) | Nhóm biểu thức chính quy mà không nhớ văn bản phù hợp. |
(?> lại) | Phù hợp với mô hình độc lập mà không cần quay lại. |
\ w | Phù hợp với các ký tự từ. |
\ W | Phù hợp với các ký tự không phải từ. |
\S | Phù hợp với khoảng trắng. Tương đương với [\ t \ n \ r \ f]. |
\S | Khớp không gian trống. |
\ d | Khớp các chữ số. Tương đương với [0-9]. |
\ D | Phù hợp với nondigits. |
\ A | Phù hợp với sự bắt đầu của chuỗi. |
\ Z | Phù hợp với phần cuối của chuỗi. Nếu một dòng mới tồn tại, nó sẽ khớp ngay trước dòng mới. |
\ z | Phù hợp với phần cuối của chuỗi. |
\ G | Phù hợp với điểm mà trận đấu cuối cùng kết thúc. |
\ n | Quay lại tham chiếu để nắm bắt số nhóm "n". |
\ b | Khớp các ranh giới từ khi nằm ngoài dấu ngoặc đơn. Phù hợp với backspace (0x08) khi bên trong dấu ngoặc vuông. |
\ B | Phù hợp với ranh giới không có từ. |
\ n, \ t, v.v. | Khớp các dòng mới, trả về vận chuyển, tab, v.v. |
\ Q | Thoát (trích dẫn) tất cả ký tự lên đến \ E. |
\ E | Kết thúc trích dẫn bắt đầu bằng \ Q. |
Các phương thức của lớp Matcher
Dưới đây là danh sách các phương thức dụ hữu íchPhương pháp chỉ mục
Các phương thức chỉ mục cung cấp các giá trị chỉ mục hữu ích cho thấy chính xác vị trí khớp trong chuỗi đầu vào
Sr.No. | Phương thức & Mô tả |
---|---|
1 | int công khai bắt đầu () Trả về chỉ mục bắt đầu của kết quả phù hợp trước đó. |
2 | int công khai bắt đầu (int nhóm) Trả về chỉ số bắt đầu của chuỗi được bắt bởi nhóm đã cho trong quá trình so khớp trước đó. |
3 | kết thúc công khai () Trả về giá trị bù trừ sau khi ký tự cuối cùng khớp. |
4 | int công khai (int group) Trả về giá trị bù trừ sau ký tự cuối cùng của chuỗi được bắt bởi nhóm đã cho trong quá trình so khớp trước đó. |
Phương pháp nghiên cứu
Phương pháp nghiên cứu xem lại chuỗi đầu vào và trả về một Boolean cho biết mẫu có được tìm thấy hay khôngSr.No. | Phương thức & Mô tả |
---|---|
1 | public boolean lookingAt () Cố gắng khớp chuỗi đầu vào, bắt đầu từ đầu vùng, so với mẫu. |
2 | boolean find () Cố gắng tìm chuỗi tiếp theo của chuỗi đầu vào khớp với mẫu. |
3 | tìm kiếm boolean công khai (int start) Đặt lại trình so khớp này và sau đó cố gắng tìm chuỗi tiếp theo của chuỗi đầu vào khớp với mẫu, bắt đầu từ chỉ mục được chỉ định. |
4 | kết quả boolean công khai () Cố gắng khớp toàn bộ khu vực với mẫu. |
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 chuỗi đầu vàoSr.No. | Phương thức & Mô tả |
---|---|
1 | public Matcher appendReplacement (StringBuffer sb, String thay thế) Thực hiện một bước chắp thêm và thay thế không đầu cuối. |
2 | công khai StringBuffer appendTail (StringBuffer sb) Thực hiện một bước chắp thêm và thay thế đầu cuối. |
3 | public String replaceAll (Chuỗi thay thế) Thay thế mọi chuỗi của chuỗi đầu vào khớp với mẫu với chuỗi thay thế đã cho. |
4 | công khai String replaceFirst (String thay thế) Thay thế dãy đầu tiên của chuỗi đầu vào khớp với mẫu với chuỗi thay thế đã cho. |
5 | công cộng tĩnh Chuỗi quoteReplacement (String s) Trả về một chuỗi thay thế bằng chữ cho Chuỗi được chỉ định. Phương pháp này tạo ra một String rằng sẽ làm việc như một sự thay thế nghĩa đen s trong phương pháp appendReplacement của lớp Matcher. |
Sau đây là ví dụ đếm số lần từ "mèo" xuất hiện trong chuỗi đầu vào -
Thí dụ
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()); } } }Điều này sẽ tạo ra kết quả sau
Đầu ra
Match number 1
start(): 0
end(): 3
Match number 2
start(): 4
end(): 7
Match number 3
start(): 8
end(): 11
Match number 4
start(): 19
end(): 22
Bạn có thể thấy rằng ví dụ này sử dụng các ranh giới từ để đảm bảo rằng các chữ "c" "a" "t" không chỉ đơn thuần là 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ề vị trí trong chuỗi đầu vào mà sự trùng khớp đã xảy ra.
Phương thức start trả về chỉ số bắt đầu của chuỗi được bắt bởi nhóm đã cho trong quá trình so khớp trước đó, và kết thúc trả về chỉ mục của ký tự cuối cùng được so khớp, cộng với một.
Các đối sánh và phương thức lookAt
Các phương thức đối sánh và phương thức lookAt đều cố khớp với chuỗi đầu vào dựa trên mẫu. Tuy nhiên, sự khác biệt là các kết quả phù hợp yêu cầu toàn bộ chuỗi đầu vào phải khớp, trong khi lookAt thì không.Cả hai phương thức luôn bắt đầu ở đầu chuỗi đầu vào. Dưới đây là ví dụ giải thích chức năng -
Thí dụ
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()); } }Điều này sẽ tạo ra kết quả sau
Đầu ra
Current REGEX is: foo
Current INPUT is: fooooooooooooooooo
lookingAt(): true
matches(): false
Phương án replaceFirst và replaceAll
Phương thức replaceFirst và replaceAll thay thế văn bản phù hợp với cụm từ thông dụng nhất định. Như tên của chúng cho biết, replaceFirst thay thế lần xuất hiện đầu tiên và replaceAll thay thế tất cả các lần xuất hiện.Dưới đây là ví dụ giải thích chức năng
Thí dụ
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 kết quả sau
Đầu ra
The cat says meow. All cats say meow.
Các phương thức appendReplacement và appendTail
Lớp Matcher cũng cung cấp các phương thức appendReplacement và appendTail để thay thế văn bản.
Dưới đây là ví dụ giải thích chức năng
Thí dụ
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 kết quả sau
Đầu ra
-foo-foo-foo-
Phương thức Class Syntax Exception Class
Một Pattern Syntax Exception là một ngoại lệ không được kiểm tra cho biết một lỗi cú pháp trong một mẫu biểu thức chính quy. Lớp Pattern Syntax Exception cung cấp các phương thức sau để giúp bạn xác định điều gì đã xảy raSr.No. | Phương thức & Mô tả |
---|---|
1 | public getDescription String () Truy xuất mô tả lỗi. |
2 | public int getIndex () Lấy chỉ mục lỗi. |
3 | public String getPattern () Lấy mẫu biểu thức chính quy sai. |
4 | public String getMessage () Trả về một chuỗi nhiều dòng chứa mô tả về lỗi cú pháp và chỉ mục của nó, mẫu biểu thức chính quy không chính xác và chỉ báo trực quan của chỉ mục lỗi trong mẫu. |
Không có nhận xét nào:
Đăng nhận xét