Xem Nhiều 7/2022 # Regex Trong Java Với Ví Dụ Cụ Thể # Top Trend

Xem 12,870

Cập nhật thông tin chi tiết về Regex Trong Java Với Ví Dụ Cụ Thể mới nhất ngày 02/07/2022 trên website Sansangdethanhcong.com. Hy vọng nội dung bài viết sẽ đáp ứng được nhu cầu của bạn, chúng tôi sẽ thường xuyên cập nhật mới nội dung để bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến thời điểm hiện tại, bài viết này đã đạt được 12,870 lượt xem.

--- Bài mới hơn ---

  • Góc Tìm Hiểu: Thread Là Gì Trong Java? Lợi Ích Của Thread
  • Thread Trong Java Là Gì Và Ưu Nhược Điểm Của Nó?
  • Tìm Hiểu Về Synchronized Trong Java
  • Tổng Quan Về Ngôn Ngữ Lập Trình Java
  • Tiểu Sử Jack Ma
  • Regular expsstions được sử dụng để định nghĩa các chuỗi mô hình dùng trong tìm kiếm, cập nhật etc. Regular expsstions hay gọi ngắn là java regex.

    Lý do sử dụng Java Regex

    Lấy ví dụ nhỏ rằng cho một chuỗi str, kiểm tra nếu chuỗi có chứa các ký số thì báo là không hợp lệ, ngược lại hợp lệ.

    Mã 1: Lặp từng ký tự của chuỗi và kiểm tra xem nếu có bất kỳ một ký số nào thì chuỗi không hợp lệ.

    public class Main { public static void main(String args) { String str = "shareprog1ramming"; String pattern = "\D+"; if (Pattern.matches(pattern, str)) { System.out.println("Hop le"); } else { System.out.println("Khong hop le"); } } }

    Output:

    Khong hop le

    Ở trên chuỗi pattern được gọi là một chuỗi mẫu dùng để áp dụng trong java regex. Ý nghĩa “\D+” chuỗi không được chứ các ký số args) { strs.add("agabc"); strs.add("agg1c"); strs.add("klA13c"); strs.add("bgaBc"); strs.add("afABC"); String patternStr = ".*abc.*"; Pattern pattern = Pattern.compile(patternStr, Pattern.CASE_INSENSITIVE); for (String str : strs) { Matcher matcher = pattern.matcher(str); if (matcher.matches()) { System.out.println(str); } } } }

    Output:

    Khi chúng ta sử dụng compile() sẽ nhận được một instance của Pattern. Sử dụng Matcher. matches() để kiểm tra tính hợp lệ của chuỗi.

    Pattern.split()

    Ngoài công dụng kiểm tra và tìm kiếm, Pattern cũng cung cấp cơ chế cắt chuỗi dựa trên chuỗi mẫu regex. Giống như matcher() split() cũng được dùng từ instance được tạo ra từ compile().

    Nếu các bạn dùng cách cắt chuỗi bình thường thì chỉ cắt theo ký tự ngắt xác định. Còn với split() cắt với chuỗi mẫu sẽ giúp cho việc cắt chuỗi linh hoạt hơn.

    Ví dụ mình có chuỗi “share235programming52.net” không biết vì lý do gì mà nó bị chèn các chữ số vào, bây giờ mình muốn lọc các chữ số ra để lấy lại chuỗi vốn có.

    Mình sẽ dùng split() với đoạn chuỗi mẫu khớp với các chữ số, để khi gặp các chữ số thì nó sẽ cắt chuỗi. Sau đó nối mảng nhận được từ split() sẽ được chuỗi ban đầu.

    import java.util.regex.Pattern; public class Main { public static void main(String results = pattern.split(str); StringBuilder primitive = new StringBuilder(); for (String s : results) { primitive.append(s); } System.out.println(primitive.toString()); } }

    Output:

    shareprogramming.net

    Matcher Class

    Ở phần trên mình đã giới thiệu sơ qua Matcher class bằng việc sử dụng method matches(). Phần này chúng ta sẽ tìm hiểu xem thử Matcher class còn có những thứ gì nữa nào.

    Để kiểm tra tính hợp lệ dựa trên chuỗi mẫu của một Matcher instance được tạo ra từ Pattern.matcher()

    // ... Matcher matcher = pattern.matcher(str); if (matcher.matches()) { System.out.println(str); }

    Tương tự matches(), chỉ khác một điểm duy nhất là lookingAt() sẽ kiểm tra chuỗi regex tại đầu chuỗi, trong khi matches() sẽ kiểm tra trên toàn bộ chuỗi.

    Method find() thường được dùng để tìm kiếm chuỗi con hoặc chuỗi regex trong chuỗi input

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args) { String content = "ZZZ AA PP AA QQQ AAA ZZ"; String string = "AA"; Pattern pattern = Pattern.compile(string); Matcher matcher = pattern.matcher(content); while(matcher.find()) { System.out.println("Index: "+ matcher.start() + " - " + matcher.end()); } } }

    Output

    Nếu bạn muốn tìm một chuỗi trong mảng ứng với mỗi chuỗi cho trước. Hoặc chúng ta loop qua các phần tử của mảng và sử dụng equals() để so sánh, hoặc chúng ta có thể dùng regex như sau:

    Pattern.matches("shareprogramming", "shareprogramming");

    Character classes

    Character class cho phép định nghĩa một tập các ký tự và cho phép trùng khớp với một ký tự trong chuỗi input đầu vào.

    Cho ví dụ:

    Pattern.matches(“”, “r”) true vì r được tìm thấy trong chuỗi input.

    Pattern.matches(“: Phù hợp với chuỗi chỉ chứa duy nhất một trong ba ký tự a, b hoặc c.

    : Phù hợp với chuỗi chỉ chứa một ký tự trong khoảng a-z và A-Z.

    ]: Phù hợp với chuỗi chỉ chứa một ký tự trong các ký tự a, b hoặc c. (phép giao)

    ]: Phù hợp với chuỗi chỉ chứa một ký tự trong trong khoảng a-z ngoại các ký tự trong khoảng m-p.

    Các Character class dựng sẵn

    Để dễ dàng cho chúng ta, java xây dựng một số character class:

    w

    Một ký tự hoặc ký số

    W

    Không phải một ký tự hoặc một ký số

    Note: Ở trên các bạn thấy các chuỗi regex đều chỉ chứa một dấu . Ấy vậy mà trong ví dụ thì lại có đến 2 dấu ?. Thật ra trong java một dấu là một ký tự escape. Thế nên để biểu diễn dấu chúng ta phải sử dụng đến 2 cấu đấy.

    Boundary Matchers

    Ở các phần trên chúng ta đã biết làm sao để tìm so khớp một chuỗi. Giờ đây, boundary matchers giúp chúng ta tìm kiếm chính xác vị trí xuất hiện trong chuỗi input.

    Chúng ta một danh sách các boundary matchers sau:

    • ^ – Đặt trước từ được khớp
    • $ – Đặt cuối từ đựợc khớp
    • b – Kiểm tra mẫu bắt đầu hay kết thúc trên word boundary.
    • B – Kiểm tra mẫu bắt đầu hay kết thúc không trên word boundary.
    • A – Bắt đầu chuỗi input.
    • G – Yêu cầu đối sánh chỉ xảy ra một lần vào cuối lần đối sánh trước.
    • Z – Cuối cùng của chuỗi input nhưng có thể cho cùng các terminators.
    • z – Cuối cùng của chuỗi input.

    Ví dụ: Input = “hgaishga” đi tìm vị trí của str = “hga” trong chuỗi input.

    ^ – đặt trước từ được khớp

    // File Main.java import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args) { String txt = "hgaishga"; String regex = "hga$"; Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(txt); while (matcher.find()) { System.out.println("Start: " + matcher.start()); System.out.println("End: " + matcher.end()); } } }

    Output: start 5 – end: 8

    b – Kiểm tra mẫu bắt đầu hay kết thúc trên word boundary

    import java.util.regex.Matcher; import java.util.regex.Pattern; public class Main { public static void main(String args) { Pattern p = Pattern.compile(".*?foo"); Matcher m = p.matcher("xfooxxxxxxfoo"); while (m.find()) System.out.println("Start: " + m.start() + " to " + (m.end())); } }

    1, Viết chương trình kiểm tra ký tự đầu tiên của chuỗi có phải là chữ in hoa hay không?

    2, Viết chương trình kiểm tra định dạng của địa chỉ email. Cho email đinh dạng đính thoả mãn các điều kiện sau:

    • Bắt đầu bằng ký tự a-z hoặc A-Z – (^*)
    • @ xuất hiện 1 lần trong sau nó là các chữ cái, ví dụ @gmail, @yahoo etc – (@{1}[a-zA-Z]+).
    • Email kết thúc với .com – mail.com$

    Source code tham khảo

    3, Kiểm tra định dạng của số điện thoại. Biết rằng số điện thoại có 10 chữ số, bắt đầu bằng số 0. Số tiếp theo không được là số 0.

    Source code tham khảo

    --- Bài cũ hơn ---

  • Một Số Ví Dụ Về Sử Dụng Regex Trong Java
  • Hướng Dẫn Lập Trình Đa Luồng Trong Java
  • Bài 7: Tìm Hiểu Về Mảng Trong Lập Trình Java
  • Hướng Dẫn Lập Trình Java Hibernate Cho Người Mới Bắt Đầu
  • Tìm Hiểu Về File I/o Trong Java
  • Bạn đang xem bài viết Regex Trong Java Với Ví Dụ Cụ Thể trên website Sansangdethanhcong.com. Hy vọng những thông tin mà chúng tôi đã chia sẻ là hữu ích với bạn. Nếu nội dung hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!

  • Web hay
  • Links hay
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100
  • CẦM ĐỒ TẠI F88
    15 PHÚT DUYỆT
    NHẬN TIỀN NGAY

    VAY TIỀN NHANH
    LÊN ĐẾN 10 TRIỆU
    CHỈ CẦN CMND

    ×