Hướng Dẫn Sử Dụng Biểu Thức Chính Quy Trong Java - Openplanning
Có thể bạn quan tâm
- Tất cả tài liệu
- Java
- Java Basic
- Java Collections Framework
- Java IO
- Java New IO
- Java Date Time
- Servlet/JSP
- Eclipse Tech
- SWT
- RCP
- RAP
- Eclipse Plugin Tools
- XML & HTML
- Java Opensource
- Java Application Servers
- Maven
- Gradle
- Servlet/Jsp
- Thymeleaf
- Spring
- Spring Boot
- Spring Cloud
- Struts2
- Hibernate
- Java Web Service
- JavaFX
- SWT
- Oracle ADF
- Android
- iOS
- Python
- Swift
- C#
- C/C++
- Ruby
- Dart
- Batch
- Database
- Oracle
- MySQL
- SQL Server
- PostGres
- Other Database
- Oracle APEX
- Report
- Client
- ECMAScript / Javascript
- TypeScript
- NodeJS
- ReactJS
- Flutter
- AngularJS
- HTML
- CSS
- Bootstrap
- OS
- Ubuntu
- Solaris
- Mac OS
- VPS
- Git
- SAP
- Amazon AWS
- Khác
- Chưa phân loại
- Phần mềm & ứng dụng tiện ích
- VirtualBox
- VmWare
- Biểu thức chính quy (Regular expression)
- Quy tắc viết biểu thức chính quy
- Các ký tự đặc biệt trong Java Regex (Special characters)
- Sử dụng String.matches(String)
- Sử dụng Pattern và Matcher
- Nhóm (Group)
- Sử dụng Pattern, Matcher, Group và *?
1. Biểu thức chính quy (Regular expression)
Một biểu thức chính quy (Regular expressions) định nghĩa một khuôn mẫu (pattern) tìm kiếm chuỗi. Nó có thể được sử dụng tìm kiếm, sửa đổi, và thao tác trên văn bản. Khuôn mẫu được định nghĩa bởi biểu thức chính quy có thể khớp một hoặc một vài lần, hoặc không khớp với một văn bản cho trước. Viết tắt của biểu thức chính quy là regexBiểu thức chính quy (Regular expression) được hỗ trợ bởi hầu hết các ngôn ngữ lập trình, ví dụ, Java, C#, C/C++, v..v Thật không may mỗi ngôn ngữ hỗ trợ biểu thức thông thường hơi khác nhau.Có thể bạn quan tâm:
- Hướng dẫn sử dụng biểu thức chính quy trong C#
- Hướng dẫn sử dụng biểu thức chính quy trong JavaScript
2. Quy tắc viết biểu thức chính quy
TT | Biểu thức chính quy | Mô tả |
1 | . | Khớp (match) với bất kỳ ký tự nào |
2 | ^regex | Biểu thức chính quy phải khớp tại điểm bắt đầu |
3 | regex$ | Biểu thức chính quy phải khớp ở cuối dòng. |
4 | [abc] | Thiết lập định nghĩa, có thể khớp với a hoặc b hoặc c. |
5 | [abc][vz] | Thiết lập định nghĩa, có thể khớp với a hoặc b hoặc c theo sau là v hay z. |
6 | [^abc] | Khi dấu ^ xuất hiện như là nhân vật đầu tiên trong dấu ngoặc vuông, nó phủ nhận mô hình. Điều này có thể khớp với bất kỳ ký tự nào ngoại trừ a hoặc b hoặc c. |
7 | [a-d1-7] | Phạm vi: phù hợp với một chuỗi giữa a và điểm d và con số từ 1 đến 7. |
8 | X|Z | Tìm X hoặc Z. |
9 | XZ | Tìm X và theo sau là Z. |
10 | $ | Kiểm tra kết thúc dòng. |
11 | \d | Số bất kỳ, viết ngắn gọn cho [0-9] |
12 | \D | Ký tự không phải là số, viết ngắn gon cho [^0-9] |
13 | \s | Ký tự khoảng trắng, viết ngắn gọn cho [ \t\n\x0b\r\f] |
14 | \S | Ký tự không phải khoản trắng, viết ngắn gọn cho [^\s] |
15 | \w | Ký tự chữ, viết ngắn gọn cho [a-zA-Z_0-9] |
16 | \W | Ký tự không phải chữ, viết ngắn gọn cho [^\w] |
17 | \S+ | Một số ký tự không phải khoảng trắng (Một hoặc nhiều) |
18 | \b | Ký tự thuộc a-z hoặc A-Z hoặc 0-9 hoặc _, viết ngắn gọn cho [a-zA-Z0-9_]. |
19 | * | Xuất hiện 0 hoặc nhiều lần, viết ngắn gọn cho {0,} |
20 | + | Xuất hiện 1 hoặc nhiều lần, viết ngắn gọn cho {1,} |
21 | ? | Xuất hiện 0 hoặc 1 lần, ? viết ngắn gọn cho {0,1}. |
22 | {X} | Xuất hiện X lần, {} |
23 | {X,Y} | Xuất hiện trong khoảng X tới Y lần. |
24 | *? | * có nghĩa là xuất hiện 0 hoặc nhiều lần, thêm ? phía sau nghĩa là tìm kiếm khớp nhỏ nhất. |
3. Các ký tự đặc biệt trong Java Regex (Special characters)
Một số ký tự đặc biệt trong Java Regex:\.[{(*+?^$|Những ký tự liệt kê ở trên là các ký tự đặc biệt. Trong Java Regex bạn muốn nó hiểu các ký tự đó theo cách thông thường bạn cần thêm dấu \ ở phía trước. Chẳng hạn ký tự chấm . java regex đang hiểu là một ký tự bất kỳ, nếu bạn muốn nó hiểu là một ký tự chấm thông thường, cần phải có dấu \ phía trước.// Mẫu regex mô tả một ký tự bất kỳ. String regex = "."; // Mẫu regex mô tả ký tự dấu chấm. String regex = "\\.";4. Sử dụng String.matches(String)
- Class String
5. Sử dụng Pattern và Matcher
1. Pattern là một đối tượng mẫu, một phiên bản đã được biên dịch của một biểu thức chính quy. Nó không có cấu tử (constructor) public, và chúng ta sẽ sử dụng method tĩnh compile(String) để tạo đối tượng, với tham số là biểu thức chính quy. 2. Matcher là một phương tiện để so khớp chuỗi dữ liệu đầu vào với đối tượng Pattern đã được tạo ra ở trên. Class này không có cấu tử public, và chúng ta lấy đối tượng này thông qua method matcher(String) của đối tượng Pattern. Với tham số đầu vào String là văn bản cần kiểm tra. 3. PatternSyntaxException sẽ bị ném ra nếu biểu thức chính quy có ngữ pháp không chính xác.String regex= ".xx."; // Tạo đối tượng Pattern thông qua method tĩnh. Pattern pattern = Pattern.compile(regex); // Lấy ra đối tượng Matcher Matcher matcher = pattern.matcher("MxxY"); boolean match = matcher.matches(); System.out.println("Match "+ match);- Class Pattern:
- Class Matcher:
6. Nhóm (Group)
Một biểu thức chính quy bạn có thể tách ra thành các nhóm (group):// Một biểu thức chính quy String regex = "\\s+=\\d+"; // Viết dưới dạng group, bởi dấu () String regex2 = "(\\s+)(=)(\\d+)"; // Một cách khác. String regex3 = "(\\s+)(=\\d+)";Các group có thể lồng nhau, và như vậy cần một quy tắc đánh chỉ số các group. Toàn bộ pattern được định nghĩa là group số 0. Còn lại được mô tả giống hình minh họa dưới đây:Từ Java 7, bạn có thể xác định một group có tên (?<name>pattern), Và bạn có thể truy cập các nội dung khớp với Matcher.group(String name). Điều này làm Regex dài hơn, nhưng mã này là có ý nghĩa hơn, dễ hơn. Nhóm bắt theo tên cũng có thể được truy cập thông qua Matcher.group(int group) với cách đánh chỉ số tương tự. Nội bộ, Java chỉ lập bản đồ (ánh xạ) từ tên đến chỉ số nhóm. Do đó, bạn không thể sử dụng cùng tên để bắt 2 nhóm khác nhau.-Hãy xem một ví dụ sử dụng đánh tên cho nhóm (group) (Java >=7)NamedGroup.javapackage org.o7planning.tutorial.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class NamedGroup { public static void main(String[] args) { final String TEXT = " int a = 100;float b= 130;float c= 110 ; "; // Sử dụng (?<groupName>pattern) để định nghĩa một Group có tên: groupName // Định nghĩa group có tên declare: sử dụng (?<declare> ...) // Và một group có tên value: sử dụng: (?<value> ..) String regex = "(?<declare>\\s*(int|float)\\s+[a-z]\\s*)=(?<value>\\s*\\d+\\s*);"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(TEXT); while (matcher.find()) { String group = matcher.group(); System.out.println(group); System.out.println("declare: " + matcher.group("declare")); System.out.println("value: " + matcher.group("value")); System.out.println("------------------------------"); } } }Kết quả chạy ví dụ:int a = 100; declare: int a value: 100 ------------------------------ float b= 130; declare: float b value: 130 ------------------------------ float c= 110 ; declare: float c value: 110 ------------------------------Để dễ hiểu bạn có thể xem hình minh họa dưới đây:Chú ý: Sử dụng (?:pattern) để thông báo với Java không xem đây là một group (None-capturing group)
7. Sử dụng Pattern, Matcher, Group và *?
Trong một số tình huống *? rất quan trọng, hãy xem một ví dụ sau:// Đây là một regex // Bắt gặp ký tự bất kỳ 0 hoặc nhiều lần, // sau đó tới ký tự ' và tiếp theo là > String regex = ".*'>"; // Đoạn TEXT1 sau đây có vẻ hợp với regex nói trên. String TEXT1 = "FILE1'>"; // Đoạn TEXT2 sau cũng hợp với regex nói trên. String TEXT2 = "FILE1'> <a href='http://HOST/file/FILE2'>";*? sẽ tìm ra một phù hợp nhỏ nhất. Chúng ta xem ví dụ sau:NamedGroup2.javapackage org.o7planning.tutorial.regex; import java.util.regex.Matcher; import java.util.regex.Pattern; public class NamedGroup2 { public static void main(String[] args) { String TEXT = "<a href='http://HOST/file/FILE1'>File 1</a>" + "<a href='http://HOST/file/FILE2'>File 2</a>"; // Java >= 7. // Định nghĩa một group có tên fileName // *? ==> Nó sẽ tìm một phù hợp nhỏ nhất. String regex = "/file/(?<fileName>.*?)'>"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(TEXT); while (matcher.find()) { System.out.println("File Name = " + matcher.group("fileName")); } } }Kết quả chạy ví dụ:File Name = FILE1 File Name = FILE2Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud
Java cơ bản
- Tùy biến trình biên dịch java xử lý Annotation của bạn (Annotation Processing Tool)
- Lập trình Java theo nhóm sử dụng Eclipse và SVN
- Hướng dẫn và ví dụ Java WeakReference
- Hướng dẫn và ví dụ Java PhantomReference
- Hướng dẫn nén và giải nén trong Java
- Cấu hình Eclipse để sử dụng JDK thay vì JRE
- Phương thức String.format() và printf() trong Java
- Cú pháp và các tính năng mới trong Java 5
- Cú pháp và các tính năng mới trong Java 8
- Hướng dẫn sử dụng biểu thức chính quy trong Java
- Hướng dẫn lập trình đa luồng trong Java - Java Multithreading
- Thư viện điều khiển các loại cơ sở dữ liệu khác nhau trong Java
- Hướng dẫn sử dụng Java JDBC kết nối cơ sở dữ liệu
- Lấy các giá trị của các cột tự động tăng khi Insert một bản ghi sử dụng JDBC
- Hướng dẫn và ví dụ Java Stream
- Functional Interface trong Java
- Giới thiệu về Raspberry Pi
- Hướng dẫn và ví dụ Java Predicate
- Abstract class và Interface trong Java
- Access modifier trong Java
- Hướng dẫn và ví dụ Java Enum
- Hướng dẫn và ví dụ Java Annotation
- So sánh và sắp xếp trong Java
- Hướng dẫn và ví dụ Java String, StringBuffer và StringBuilder
- Hướng dẫn xử lý ngoại lệ trong Java - Java Exception Handling
- Hướng dẫn và ví dụ Java Generics
- Thao tác với tập tin và thư mục trong Java
- Hướng dẫn và ví dụ Java BiPredicate
- Hướng dẫn và ví dụ Java Consumer
- Hướng dẫn và ví dụ Java BiConsumer
- Bắt đầu với Java cần những gì?
- Lịch sử của Java và sự khác biệt giữa Oracle JDK và OpenJDK
- Cài đặt Java trên Windows
- Cài đặt Java trên Ubuntu
- Cài đặt OpenJDK trên Ubuntu
- Cài đặt Eclipse
- Cài đặt Eclipse trên Ubuntu
- Học nhanh Java cho người mới bắt đầu
- Lịch sử của bit và byte trong khoa học máy tính
- Các kiểu dữ liệu trong Java
- Các toán tử Bitwise
- Câu lệnh rẽ nhánh (if else) trong Java
- Câu lệnh rẽ nhánh switch trong Java
- Vòng lặp trong Java
- Mảng (Array) trong Java
- JDK Javadoc định dạng CHM
- Thừa kế và đa hình trong Java
- Hướng dẫn và ví dụ Java Function
- Hướng dẫn và ví dụ Java BiFunction
- Ví dụ về Java encoding và decoding sử dụng Apache Base64
- Hướng dẫn và ví dụ Java Reflection
- Hướng dẫn gọi phương thức từ xa với Java RMI
- Hướng dẫn lập trình Java Socket
- Các nền tảng nào bạn nên chọn để lập trình ứng dụng Java Desktop?
- Hướng dẫn và ví dụ Java Commons IO
- Hướng dẫn và ví dụ Java Commons Email
- Hướng dẫn và ví dụ Java Commons Logging
- Tìm hiểu về Java System.identityHashCode, Object.hashCode và Object.equals
- Hướng dẫn và ví dụ Java SoftReference
- Hướng dẫn và ví dụ Java Supplier
- Lập trình Java hướng khía cạnh với AspectJ (AOP)
- Hướng dẫn lập trình Java Servlet/JSP
- Các hướng dẫn Java Collections Framework
- Java API cho HTML & XML
- Các hướng dẫn Java IO
- Các hướng dẫn Java Date Time
- Các hướng dẫn Spring Boot
- Các hướng dẫn Maven
- Các hướng dẫn Gradle
- Các hướng dẫn Java Web Services
- Các hướng dẫn lập trình Java SWT
- Các hướng dẫn lập trình JavaFX
- Các hướng dẫn Java Oracle ADF
- Các hướng dẫn Struts2 Framework
- Các hướng dẫn Spring Cloud
Các bài viết mới nhất
- Xử lý lỗi 404 trong Flutter GetX
- Ví dụ đăng nhập và đăng xuất với Flutter Getx
- Hướng dẫn và ví dụ Flutter NumberTextInputFormatter
- Hướng dẫn và ví dụ Flutter multi_dropdown
- Hướng dẫn và ví dụ Flutter flutter_form_builder
- Hướng dẫn và ví dụ Flutter GetX obs Obx
- Hướng dẫn và ví dụ Flutter GetX GetBuilder
- Từ khoá part và part of trong Dart
- Hướng dẫn và ví dụ Flutter InkWell
- Bài thực hành Flutter SharedPreferences
- Hướng dẫn và ví dụ Flutter Radio
- Hướng dẫn và ví dụ Flutter Slider
- Hướng dẫn và ví dụ Flutter SkeletonLoader
- Chỉ định cổng cố định cho Flutter Web trên Android Studio
- Hướng dẫn và ví dụ Flutter SharedPreferences
- Tạo Module trong Flutter
- Flutter upload ảnh sử dụng http và ImagePicker
- Bài thực hành Dart http CRUD
- Hướng dẫn và ví dụ Flutter image_picker
- Flutter GridView với SliverGridDelegate tuỳ biến
- Java cơ bản
Từ khóa » Tìm Hiểu Về Regex Trong Java
-
Java Regex - Viblo
-
Regular Expression Trong Java - CodeLearn
-
Sử Dụng Regex Trong Java - VietTuts
-
Một Số Ví Dụ Về Sử Dụng Regex Trong Java - Viblo
-
Regex Trong Java - Tìm Hiểu Nhanh Về Biểu Thức Chính Quy Trong Java
-
Hướng Dẫn Sử Dụng Biểu Thức Chính Quy (Regular Expression) Trong ...
-
Regex Trong Java Với Ví Dụ Cụ Thể - Part 1 - Deft Blog
-
Regular Expression Trong Java
-
Regex Là Gì? Tất Tần Tật Kiến Thức Về Regex | TopDev
-
Sử Dụng Regex Trong Java
-
Tổng Quan Về Regex (biểu Thức Chính Quy) Trong Java
-
Regular Expression (Regex) Trong Java - Học Java - CodeGym
-
Java: Các Phương Thức Của Lớp Matcher | V1Study
-
Xem Nhiều 6/2022 # Regex Trong Java Với Ví Dụ Cụ Thể # Top Trend