Java: Các lớp ký tự định nghĩa trước

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

API Pattern chứa một số hữu dụng các lớp ký tự định nghĩa trước, trong đó cung cấp các shorthand cho thuận tiện cho việc sử dụng biểu thức chính quy:

Cấu trúc Mô tả
. Một ký tự bất kỳ (có thể hoặc không tương thích với các phần cuối dòng)
\d Một sô: [0-9]
\D Không phải số: [^0-9]
\s Một ký tự cách trắng: [ \t\n\x0B\f\r]
\S Một ký tự không cách trắng: [^\s]
\w Một ký tự chuẩn: [a-zA-Z_0-9]
\W Không phải ký tự chuẩnA non-word character: [^\w]

Ở bảng trên thì mỗi một cấu trúc ở cột bên trái là một shorthand cho lớp character ở phần bên phải. Ví dụ như \d có nghĩa là một số bất kỳ (0-9), còn \w có nghĩa là một ký tự chuẩn (ký tự in thường, in hoa, ký tự gạch chân và số). Ta nên sử dụng lớp tiền định nghĩa mỗi khi có thể vì chúng làm cho mã lệnh của ta dễ đọc và có thể loại bỏ được những lỗi tạo ra do lớp ký tự bị thay đổi.

Các cấu trúc bắt đầu bằng dấu xổ trái (\) được gọi là cấu trúc escaped. Chúng ta đã từng thấy các cấu trúc escaped trong bài viết Hằng chuỗi trong đó ta có đề cập đến việc sử dụng dấu xổ trái và \Q và \E. Nếu ta muốn sử dụng một cấu trúc escaped trong một hằng chuỗi thì ta phải thêm vào phía trước một dấu xổ trái nữa. Ví dụ:

private final String REGEX = "\\d"; // mt ký s bt k [0-9]

Ở ví dụ trên thì \d là biểu thức chính quy; còn dấu xổ trái thêm vào là bắt buộc để có thể biên dịch được. Phần kiểm tra dữ liệu (test harness) sẽ đọc biểu thức trực tiếp từ Console, và nó sẽ bỏ qua dấu xổ phải thêm vào.

Ví dụ sau đây demo cách sử dụng lớp ký tự định nghĩa trước:

Enter your regex: .
Enter input string to search: @
I found the text "@" starting at index 0 and ending at index 1.

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

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

Enter your regex: \d
Enter input string to search: 1
I found the text "1" starting at index 0 and ending at index 1.

Enter your regex: \d
Enter input string to search: a
No match found.

Enter your regex: \D
Enter input string to search: 1
No match found.

Enter your regex: \D
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \s
Enter input string to search: 
I found the text " " starting at index 0 and ending at index 1.

Enter your regex: \s
Enter input string to search: a
No match found.

Enter your regex: \S
Enter input string to search: 
No match found.

Enter your regex: \S
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \w
Enter input string to search: a
I found the text "a" starting at index 0 and ending at index 1.

Enter your regex: \w
Enter input string to search: !
No match found.

Enter your regex: \W
Enter input string to search: a
No match found.

Enter your regex: \W
Enter input string to search: !
I found the text "!" starting at index 0 and ending at index 1.

Trong ba ví dụ đầu tiên thì biểu thức chính quy là khá đơn giản, trong đó . (siêu ký tự "dot") có nghĩa là "ký tự bất kỳ". Do vậy, sự tương thích đạt được trong cả ba trường hợp này (ký tự @, một số, và một ký tự). Các ví dụ còn lại thì mỗi ví dụ sử dụng một hàm tạo biểu thức chính quy đơn giản từ bảng các lớp ký tự định nghĩa trước ở trên.

» Tiếp: Bộ định lượng (Quantifier)
« Trước: 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
Copied !!!