2011-02-07 41 views
36

Tôi đang sử dụng regex để lập trình trình xác thực đầu vào cho hộp văn bản nơi tôi chỉ muốn ký tự chữ cái. Tôi đã tự hỏi nếu [A-z][a-zA-Z] là tương đương hoặc nếu có hiệu suất khác biệt khôn ngoan.Sự khác biệt giữa regex [A-z] và [a-zA-Z]

Tôi tiếp tục đọc [a-zA-Z] trên các tìm kiếm của mình và không đề cập đến [A-z].

Tôi đang sử dụng java String.matches(regex).

Trả lời

53

[A-z] sẽ phù hợp với các ký tự ASCII trong khoảng từ A để z, trong khi [a-zA-Z] sẽ phù hợp với các ký tự ASCII trong khoảng từ A để Z trong khoảng từ a để z. Thoạt nhìn, điều này có vẻ tương đương - tuy nhiên, nếu bạn nhìn vào this table ký tự ASCII, bạn sẽ thấy rằng A-z bao gồm một số ký tự khác. Cụ thể, chúng là [, \, ], ^, _ và `` `(mà bạn rõ ràng không muốn).

+6

Tôi đoán tôi chỉ thực sự là không chắc chắn nếu có ký tự giữa Z-a. – Eric

+1

@Eric https://secure.wikimedia.org/wikipedia/en/wiki/Ascii Tôi tin rằng bạn sẽ tìm thấy '[\\]^- \' 'giữa' Z' và 'a' – KitsuneYMG

8

Hãy xem ASCII table. Bạn sẽ thấy rằng có một số ký tự giữa các số Za, vì vậy, bạn sẽ khớp với nhiều hơn bạn muốn.

9

Kết quả phù hợp az 'a' đến 'z' AZ khớp 'A' với 'Z' Az khớp với tất cả các ký tự này cũng như các ký tự giữa 'Z' và 'a' là [] ^/_ `

Tham khảo http://www.asciitable.com/

6

Dấu ngoặc vuông tạo một lớp ký tự và gạch nối là viết tắt để thêm mọi ký tự giữa hai ký tự được cung cấp. tức là [A-F] có thể được viết [ABCDEF].

Lớp nhân vật [A-z] sẽ khớp với mọi ký tự giữa các ký tự, trong đó ASCII bao gồm một số ký tự khác như '[', '\' và ']'.

Cách thay thế để chỉ định cả hai trường hợp sẽ là đặt cụm từ thông dụng thành phân biệt chữ hoa chữ thường, bằng cách sử dụng công cụ sửa đổi /i.

3

Hãy nhìn vào các ASCII chart (mà nhân vật Java là dựa trên): có khá một vài ký tự chấm câu nằm giữa Z và một, cụ thể là những:

[\]^ _` 
6

Khi bạn có một cái nhìn vào ASCII bảng, bạn sẽ thấy như sau:

A = 65 
Z = 90 
a = 97 
z = 122 

vì vậy, [A-z] sẽ phù hợp với tất cả các char từ 65 đến 122. Điều này bao gồm các ký tự (91 -> 97) cũng như:

[\]^_` 

Điều này có nghĩa [A-Za-z] sẽ phù hợp với chỉ bảng chữ cái, mà không chú ý chars

Các vấn đề liên quan