JavaRush /Blog Java /Random-VI /Biểu thức chính quy trong Java
terranum
Mức độ
Milan

Biểu thức chính quy trong Java

Xuất bản trong nhóm
RegExBiểu thức chính quy là một loại mẫu có thể được áp dụng cho văn bản (Chuỗi, trong Java). Java cung cấp gói java.util.regex để khớp các biểu thức chính quy. Biểu thức chính quy rất giống với ngôn ngữ lập trình Perl và rất dễ học. Biểu thức chính quy có khớp với văn bản (một phần của nó) hay không. * Nếu một biểu thức chính quy khớp với một đoạn văn bản thì chúng ta có thể tìm thấy nó. ** Nếu biểu thức chính quy là biểu thức ghép thì chúng ta có thể dễ dàng tìm ra phần nào của biểu thức chính quy khớp với phần nào của văn bản.

Ví dụ đầu tiên

Biểu thức chính quy " [a-z] +" khớp với tất cả các chữ cái viết thường trong văn bản. [a-z]có nghĩa là bất kỳ ký tự nào từ ađến zbao hàm và +có nghĩa là "một hoặc nhiều" ký tự. Giả sử chúng tôi cung cấp chuỗi "code 2 learn java tutorial". Cách thực hiện việc này trong Java Trước tiên, bạn phải tạo một mẫu:
import java.util.regex.*;
Pattern p = Pattern.compile([a-z]+);
Tiếp theo bạn phải tạo matchervăn bản bằng cách gửi tin nhắn trên sơ đồ:
Matcher m = p.matcher(“code 2 learn java tutorial”);
LƯU Ý: Không có hàm tạo Pattern, Matcherchúng tôi tạo chúng bằng các phương thức lớp Pattern. Pattern Class:Đối tượng lớp cấu thành một biểu diễn của một biểu thức chính quy. Lớp Pattern không cung cấp bất kỳ hàm tạo công khai nào. Để tạo mẫu, trước tiên bạn phải gọi một trong các phương thức tĩnh công khai, sau đó trả về một đối tượng của lớp Pattern. Các phương thức này lấy một biểu thức chính quy làm đối số. Matcher Class:Đối tượng Finder là một công cụ diễn giải mẫu và thực hiện các thao tác khớp trên chuỗi đầu vào. Giống như Patternmột lớp, Matchernó không có hàm tạo công khai. Bạn nhận được một đối tượng Matcherbằng cách gọi một phương thức matchertrên một đối tượng lớp Pattern. Khi chúng tôi đã hoàn thành các bước này và bây giờ chúng tôi có một phiên bản của lớp Matcher m , bây giờ chúng tôi có thể kiểm tra xem mẫu có được tìm thấy hay không và nếu có thì ở vị trí nào, v.v. m.matches()trả về true nếu mẫu khớp với toàn bộ chuỗi, nếu không thì trả về false. m.lookingAt()trả về true nếu mẫu khớp với phần đầu của chuỗi, nếu không thì trả về false. m.find ()trả về true nếu mẫu khớp với bất kỳ phần nào của văn bản.

Tìm một trận đấu

Sau khi khớp thành công, m.start() sẽ trả về chỉ mục của ký tự đầu tiên khớp và m.end() sẽ trả về chỉ mục của ký tự cuối cùng khớp, cộng thêm một. Nếu nỗ lực không thành công và không tìm thấy kết quả phù hợp, m.start()họ m.end()sẽ némIllegalStateException
  • Điều này là RuntimeExceptionđể bạn không cần phải bắt nó.
Có vẻ lạ khi m.end()trả về chỉ mục của ký tự trùng khớp cuối cùng cộng với một, nhưng đó chính xác là điều mà hầu hết các tệp String.
  • Ví dụ,“Now is the time“.substring(m.start(), m.end())
sẽ trả về cùng một chuỗi. Chúng ta hãy xem mã:
import java.util.regex.*;

public class RegexTest {
    public static void main(String args[]) {
        String pattern = "[a-z]+";
        String text = "code 2 learn java tutorial";
        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(text);
        while(m.find()) {
            System.out.print(text.substring(m.start(), m.end()) + "*");
        }
    }
}
Output: code*learn*java*tutorial*

Phương pháp bổ sung

Nếu có sự trùng khớp thì:
  • m.replaceFirst(replacement)trả về một chuỗi mới, trong đó chuỗi con đầu tiên khớp với mẫu sẽ được thay thế bằngreplacement
  • m.replaceAll(replacement)trả về một chuỗi mới, trong đó mỗi chuỗi con khớp với mẫu sẽ được thay thế
  • m.find(StartIndex)tìm kết quả phù hợp tiếp theo bắt đầu từ chỉ mục đã chỉ định
  • m.reset()đặt lại mẫu
  • m.reset(NewText)đặt lại công cụ tìm và cung cấp cho nó một văn bản mới (có Stringthể StringBufferhoặc CharBuffer)

Cú pháp biểu thức chính quy

  • ^So khớp với phần đầu của một dòng.
  • $Khớp với phần cuối của chuỗi.
  • .Khớp với bất kỳ ký tự đơn nào ngoại trừ dòng mới. Sử dụng tùy chọn m cho phép nó khớp với một dòng mới.
  • [...]Khớp với bất kỳ ký tự đơn nào trong dấu ngoặc đơn.
  • [^ ...]Khớp với bất kỳ ký tự đơn nào không nằm trong dấu ngoặc đơn.
  • \ABắt đầu toàn bộ dòng.
  • \zKết thúc toàn bộ dòng.
  • \ZSự kết thúc của toàn bộ dòng ngoại trừ dấu kết thúc dòng cuối cùng.
  • re*Khớp với 0 hoặc nhiều lần xuất hiện của biểu thức trước đó.
  • re+Một hoặc nhiều kết quả khớp với biểu thức trước đó.
  • re?Khớp 0 hoặc 1 với vị trí của biểu thức trước đó.
  • re{n}Khớp chính xác N Số lần xuất hiện của biểu thức trước đó.
  • re{n,}Khớp với N hoặc nhiều lần xuất hiện của biểu thức trước đó.
  • re{n, m}Khớp ít nhất n và nhiều nhất m lần xuất hiện của biểu thức trước đó.
  • a|bPhù hợp với a hoặc b.
  • (re)Một nhóm các biểu thức chính quy và ghi nhớ văn bản tìm thấy.
  • (?: re)Các nhóm biểu thức chính quy không nhớ văn bản tìm thấy.
  • (?> re)Khớp với một mẫu độc lập không có kết quả trả về.
  • \wKhớp các chữ cái và số [a-zA-Z_0-9].
  • \WĐây không phải là chữ cái hoặc số.
  • \sPhù hợp với không gian. Tương đương với [\t\n\r\f].
  • \SKhông phải ký tự khoảng trắng.
  • \dPhù hợp với các con số. Tương đương với [0-9].
  • \DKhông khớp với các con số.
  • \GPhù hợp với điểm của trận đấu cuối cùng.
  • \nPhù hợp với dòng mới.
  • \bPhù hợp tại một ranh giới từ.
  • \BKhông khớp với ranh giới từ.
  • \n, \t, etc.Ký tự dòng mới, xuống dòng, ký tự tab, v.v.
  • \QTrích dẫn tất cả các ký tự trước \E.
  • \EĐoạn trích dẫn bắt đầu bằng \Q kết thúc.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION