Java tut 42 : Java RegEx
Regular Expression là gì?
Biểu thức chính quy là một chuỗi các ký tự tạo thành một mẫu tìm kiếm. Khi bạn tìm kiếm dữ liệu trong một văn bản, bạn có thể sử dụng mẫu tìm kiếm này để mô tả những gì bạn đang tìm kiếm.
Biểu thức chính quy có thể là một ký tự đơn hoặc một mẫu phức tạp hơn.
Biểu thức chính quy có thể được sử dụng để thực hiện tất cả các loại hoạt động tìm kiếm văn bản và thay thế văn bản .
Java không tích hợp sẵn lớp Biểu thức chính quy, nhưng chúng ta có thể nhập java.util.regex
gói để làm việc với biểu thức chính quy. Gói này bao gồm các lớp sau:
Pattern
Lớp – Xác định một mẫu (được sử dụng trong tìm kiếm)Matcher
Lớp – Được sử dụng để tìm kiếm mẫuPatternSyntaxException
Lớp – Chỉ ra lỗi cú pháp trong một mẫu biểu thức chính quy
Thí dụ
Tìm hiểu xem có bất kỳ sự xuất hiện nào của từ “w3schools” trong một câu không:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
Giải thích ví dụ
Trong ví dụ này, Từ “w3schools” đang được tìm kiếm trong một câu.
Đầu tiên, mẫu được tạo bằng Pattern.compile()
phương pháp này. Tham số đầu tiên cho biết mẫu nào đang được tìm kiếm và tham số thứ hai có cờ để chỉ ra rằng tìm kiếm phải không phân biệt chữ hoa chữ thường. Tham số thứ hai là tùy chọn.
Các matcher()
phương pháp được sử dụng để tìm kiếm các mẫu trong một chuỗi. Nó trả về một đối tượng Matcher chứa thông tin về tìm kiếm đã được thực hiện.
Các find()
phương thức trả về true nếu mô hình đã được tìm thấy trong chuỗi và false nếu nó không được tìm thấy.
FLags
Các cờ trong compile()
phương thức thay đổi cách thực hiện tìm kiếm. Dưới đây là một vài trong số họ:
Pattern.CASE_INSENSITIVE
– Trường hợp các chữ cái sẽ bị bỏ qua khi thực hiện tìm kiếm.Pattern.LITERAL
– Các ký tự đặc biệt trong mẫu sẽ không có bất kỳ ý nghĩa đặc biệt nào và sẽ được coi như các ký tự thông thường khi thực hiện tìm kiếm.Pattern.UNICODE_CASE
– Sử dụng nó cùng vớiCASE_INSENSITIVE
lá cờ để bỏ qua trường hợp các chữ cái nằm ngoài bảng chữ cái tiếng Anh
Mẫu biểu thức chính quy
Tham số đầu tiên của Pattern.compile()
phương thức là mẫu. Nó mô tả những gì đang được tìm kiếm.
Dấu ngoặc nhọn được sử dụng để tìm một loạt các ký tự:
Expression | Description |
---|---|
[abc] | Find one character from the options between the brackets |
[^abc] | Find one character NOT between the brackets |
[0-9] | Find one character from the range 0 to 9 |
Metacharacters
Metacharacters là những ký tự có ý nghĩa đặc biệt:
Metacharacter | Description |
---|---|
| | Find a match for any one of the patterns separated by | as in: cat|dog|fish |
. | Find just one instance of any character |
^ | Finds a match as the beginning of a string as in: ^Hello |
$ | Finds a match at the end of the string as in: World$ |
\d | Find a digit |
\s | Find a whitespace character |
\b | Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b |
\uxxxx | Find the Unicode character specified by the hexadecimal number xxxx |
Bộ định lượng
Bộ định lượng xác định các đại lượng:
Quantifier | Description |
---|---|
n+ | Matches any string that contains at least one n |
n* | Matches any string that contains zero or more occurrences of n |
n? | Matches any string that contains zero or one occurrences of n |
n{x} | Matches any string that contains a sequence of X n‘s |
n{x,y} | Matches any string that contains a sequence of X to Y n‘s |
n{x,} | Matches any string that contains a sequence of at least X n‘s |
Lưu ý: Nếu biểu thức của bạn cần tìm kiếm một trong các ký tự đặc biệt, bạn có thể sử dụng dấu gạch chéo ngược (\) để loại bỏ chúng. Trong Java, dấu gạch chéo ngược trong chuỗi cần phải được thoát khỏi chính nó, vì vậy cần phải có hai dấu gạch chéo ngược để thoát khỏi các ký tự đặc biệt. Ví dụ: để tìm kiếm một hoặc nhiều dấu chấm hỏi, bạn có thể sử dụng biểu thức sau: “\\?”
Biểu thức chính quy là gì?
Biểu thức chính quy là một chuỗi các ký tự tạo thành một mẫu tìm kiếm. Khi bạn tìm kiếm dữ liệu trong một văn bản, bạn có thể sử dụng mẫu tìm kiếm này để mô tả những gì bạn đang tìm kiếm.
Biểu thức chính quy có thể là một ký tự đơn hoặc một mẫu phức tạp hơn.
Biểu thức chính quy có thể được sử dụng để thực hiện tất cả các loại hoạt động tìm kiếm văn bản và thay thế văn bản .
Java không tích hợp sẵn lớp Biểu thức chính quy, nhưng chúng ta có thể nhập java.util.regex
gói để làm việc với biểu thức chính quy. Gói này bao gồm các lớp sau:
Pattern
Lớp – Xác định một mẫu (được sử dụng trong tìm kiếm)Matcher
Lớp – Được sử dụng để tìm kiếm mẫuPatternSyntaxException
Lớp – Chỉ ra lỗi cú pháp trong một mẫu biểu thức chính quy
Thí dụ
Tìm hiểu xem có bất kỳ sự xuất hiện nào của từ “w3schools” trong một câu không:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("w3schools", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher("Visit W3Schools!");
boolean matchFound = matcher.find();
if(matchFound) {
System.out.println("Match found");
} else {
System.out.println("Match not found");
}
}
}
// Outputs Match found
Giải thích ví dụ
Trong ví dụ này, Từ “w3schools” đang được tìm kiếm trong một câu.
Đầu tiên, mẫu được tạo bằng Pattern.compile()
phương pháp này. Tham số đầu tiên cho biết mẫu nào đang được tìm kiếm và tham số thứ hai có cờ để chỉ ra rằng tìm kiếm phải không phân biệt chữ hoa chữ thường. Tham số thứ hai là tùy chọn.
Các matcher()
phương pháp được sử dụng để tìm kiếm các mẫu trong một chuỗi. Nó trả về một đối tượng Matcher chứa thông tin về tìm kiếm đã được thực hiện.
Các find()
phương thức trả về true nếu mô hình đã được tìm thấy trong chuỗi và false nếu nó không được tìm thấy.
Cờ
Các cờ trong compile()
phương thức thay đổi cách thực hiện tìm kiếm. Dưới đây là một vài trong số họ:
Pattern.CASE_INSENSITIVE
– Trường hợp các chữ cái sẽ bị bỏ qua khi thực hiện tìm kiếm.Pattern.LITERAL
– Các ký tự đặc biệt trong mẫu sẽ không có bất kỳ ý nghĩa đặc biệt nào và sẽ được coi như các ký tự thông thường khi thực hiện tìm kiếm.Pattern.UNICODE_CASE
– Sử dụng nó cùng vớiCASE_INSENSITIVE
lá cờ để bỏ qua trường hợp các chữ cái nằm ngoài bảng chữ cái tiếng Anh
Mẫu biểu thức chính quy
Tham số đầu tiên của Pattern.compile()
phương thức là mẫu. Nó mô tả những gì đang được tìm kiếm.
Dấu ngoặc nhọn được sử dụng để tìm một loạt các ký tự:
Expression | Description |
---|---|
[abc] | Find one character from the options between the brackets |
[^abc] | Find one character NOT between the brackets |
[0-9] | Find one character from the range 0 to 9 |
Siêu nhân vật
Metacharacters là những ký tự có ý nghĩa đặc biệt:
Metacharacter | Description |
---|---|
| | Find a match for any one of the patterns separated by | as in: cat|dog|fish |
. | Find just one instance of any character |
^ | Finds a match as the beginning of a string as in: ^Hello |
$ | Finds a match at the end of the string as in: World$ |
\d | Find a digit |
\s | Find a whitespace character |
\b | Find a match at the beginning of a word like this: \bWORD, or at the end of a word like this: WORD\b |
\uxxxx | Find the Unicode character specified by the hexadecimal number xxxx |
Bộ định lượng
Bộ định lượng xác định các đại lượng:
Quantifier | Description |
---|---|
n+ | Matches any string that contains at least one n |
n* | Matches any string that contains zero or more occurrences of n |
n? | Matches any string that contains zero or one occurrences of n |
n{x} | Matches any string that contains a sequence of X n‘s |
n{x,y} | Matches any string that contains a sequence of X to Y n‘s |
n{x,} | Matches any string that contains a sequence of at least X n‘s |
Lưu ý: Nếu biểu thức của bạn cần tìm kiếm một trong các ký tự đặc biệt, bạn có thể sử dụng dấu gạch chéo ngược (\) để loại bỏ chúng. Trong Java, dấu gạch chéo ngược trong chuỗi cần phải được thoát khỏi chính nó, vì vậy cần phải có hai dấu gạch chéo ngược để thoát khỏi các ký tự đặc biệt. Ví dụ: để tìm kiếm một hoặc nhiều dấu chấm hỏi, bạn có thể sử dụng biểu thức sau: “\\?”