Java: Lớp Character

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Nếu bạn duyệt qua các đặc điểm kỹ thuật của lớp Pattern, bạn sẽ thấy bảng tóm tắt các cấu trúc biểu thức chính quy được hỗ trợ. Trong bài viết này bạn sẽ tìm thấy những điều sau đây:

Cấu trúc Mô tả
[abc] Tương đương với ký tự 'a', 'b', hoặc 'c' (simple class)
[^abc] Một ký tự bất kỳ nhưng không phải là 'a', 'b', hay c (negation)
[a-zA-Z] Một trong các ký tự từ a-z hoặc từ A-Z inclusive (range)
[a-d[m-p]] Một ký tự từ a-d, hoặc từ m-p, có thể viết tương đương: [a-dm-p] (union)
[a-z&&[def]] d, e, or f (intersection)
[a-z&&[^bc]] Một ký tự bất kỳ từ a-z ngoại trừ b và c, có thể viết tương đương: [ad-z] (subtraction)
[a-z&&[^m-p]] Một ký tự bất kỳ từ a-z ngoại trừ các ký tự từ m-p, có thể viết tương đương: [a-lq-z] (subtraction)

Lưu ý: Từ "class" trong cụm từ "character class" không tham chiếu đến tệp .class. Trong ngữ cảnh của biểu thức chính quy, một lớp ký tự là một tập hợp các ký tự được đặt trong dấu ngoặc vuông. Nó chỉ định các ký tự sẽ khớp thành công với một ký tự từ một chuỗi đầu vào nhất định.

Các lớp đơn giản

Dạng cơ bản nhất của lớp ký tự là đặt các ký tự vào cặp ngoặc vuông. Ví dụ như biểu thức [bcr]at sẽ tương đương với "bat", "cat", hoặc "rat" vì nó định nghĩa một lớp ký tự (chấp nhận 'b', 'c', hoặc 'r') là ký tự đầu tiên của nó.

Enter your regex: [bcr]at
Enter input string to search: bat
I found the text "bat" starting at index 0 and ending at index 3.

Enter your regex: [bcr]at
Enter input string to search: cat
I found the text "cat" starting at index 0 and ending at index 3.

Enter your regex: [bcr]at
Enter input string to search: rat
I found the text "rat" starting at index 0 and ending at index 3.

Enter your regex: [bcr]at
Enter input string to search: hat
No match found.

Trong các ví dụ trên, đối sánh tổng thể chỉ thành công khi ký tự đầu tiên khớp với một trong các ký tự được xác định bởi lớp ký tự.

Phủ định (Negation)

Để tương thích với tất cả các ký tự ngoại trừ những ký tự nằm sau siêu ký tự "^"  trong cặp ngoặc vuông, ta dùng kỹ thuật negation.

Enter your regex: [^bcr]at
Enter input string to search: bat
No match found.

Enter your regex: [^bcr]at
Enter input string to search: cat
No match found.

Enter your regex: [^bcr]at
Enter input string to search: rat
No match found.

Enter your regex: [^bcr]at
Enter input string to search: hat
I found the text "hat" starting at index 0 and ending at index 3.

So khớp chỉ thành công nếu ký tự đầu tiên của chuỗi đầu vào không chứa bất kỳ ký tự nào được xác định bởi lớp ký tự.

Phạm vi (Range)

Đôi khi bạn sẽ muốn định nghĩa một lớp ký tự bao gồm một phạm vi giá trị, chẳng hạn như các chữ cái "a đến h" hoặc các số "1 đến 5".

Để chỉ định một phạm vi, chỉ cần chèn siêu ký tự "-" giữa ký tự đầu tiên và ký tự cuối cùng được so khớp, chẳng hạn như [1-5] hoặc [a-h].

Bạn cũng có thể đặt các phạm vi khác nhau bên cạnh nhau trong lớp để mở rộng hơn nữa khả năng đối sánh. Ví dụ: [a-zA-Z] sẽ khớp với bất kỳ chữ cái nào trong bảng chữ cái: a đến z (chữ thường) hoặc A đến Z (chữ hoa).

Dưới đây là một số ví dụ về phạm vi và phủ định:

Enter your regex: [a-c]
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: b
I found the text "b" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: c
I found the text "c" starting at index 0 and ending at index 1.

Enter your regex: [a-c]
Enter input string to search: d
No match found.

Enter your regex: foo[1-5]
Enter input string to search: foo1
I found the text "foo1" starting at index 0 and ending at index 4.

Enter your regex: foo[1-5]
Enter input string to search: foo5
I found the text "foo5" starting at index 0 and ending at index 4.

Enter your regex: foo[1-5]
Enter input string to search: foo6
No match found.

Enter your regex: foo[^1-5]
Enter input string to search: foo1
No match found.

Enter your regex: foo[^1-5]
Enter input string to search: foo6
I found the text "foo6" starting at index 0 and ending at index 4.

Kết hợp (Union)

Bạn cũng có thể sử dụng kết hợp để tạo một lớp ký tự bao gồm hai hoặc nhiều lớp ký tự riêng biệt.

Để tạo kết hợp ta chỉ cần lồng một lớp vào bên trong lớp kia, chẳng hạn như [0-4 [6-8]]. Kết hợp cụ thể này tạo ra một lớp ký tự duy nhất khớp với các số 0, 1, 2, 3, 4, 6, 7 và 8.

Enter your regex: [0-4[6-8]]
Enter input string to search: 0
I found the text "0" starting at index 0 and ending at index 1.

Enter your regex: [0-4[6-8]]
Enter input string to search: 5
No match found.

Enter your regex: [0-4[6-8]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.

Enter your regex: [0-4[6-8]]
Enter input string to search: 8
I found the text "8" starting at index 0 and ending at index 1.

Enter your regex: [0-4[6-8]]
Enter input string to search: 9
No match found.

Giao nhau (Intersection)

Để tạo một lớp ký tự chỉ khớp với các ký tự chung cho tất cả các lớp lồng nhau của nó, hãy sử dụng &&, như trong [0-9 && [345]]. Giao điểm cụ thể này tạo ra một lớp ký tự duy nhất phù hợp với các số chung cho cả hai lớp ký tự: 3, 4 và 5.

Enter your regex: [0-9&&[345]]
Enter input string to search: 3
I found the text "3" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[345]]
Enter input string to search: 4
I found the text "4" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[345]]
Enter input string to search: 5
I found the text "5" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[345]]
Enter input string to search: 2
No match found.

Enter your regex: [0-9&&[345]]
Enter input string to search: 6
No match found.

Dưới đây là ví dụ thể hiện sự giao nhau của hai phạm vi:

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 3
No match found.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 4
I found the text "4" starting at index 0 and ending at index 1.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 5
I found the text "5" starting at index 0 and ending at index 1.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.

Enter your regex: [2-8&&[4-6]]
Enter input string to search: 7
No match found.

Loại trừ (Subtraction)

Cuối cùng, bạn có thể sử dụng phép loại trừ để phủ định một hoặc nhiều lớp ký tự lồng nhau, chẳng hạn như [0-9 && [^345]]. Ví dụ này tạo ra một lớp ký tự phù hợp với mọi thứ từ 0 đến 9, ngoại trừ các số 3, 4 và 5.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 2
I found the text "2" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 3
No match found.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 4
No match found.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 5
No match found.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 6
I found the text "6" starting at index 0 and ending at index 1.

Enter your regex: [0-9&&[^345]]
Enter input string to search: 9
I found the text "9" starting at index 0 and ending at index 1.

Bây giờ ta có thể xem lại bảng các lớp ký tự trước khi chuyển sang bài học tiếp theo.

» Tiếp: Các lớp ký tự định nghĩa trước
« Trước: Hằng chuỗi
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!