Tôi thực sự muốn sử dụng \ w nhưng nó cũng phù hợp với gạch dưới vì vậy tôi sẽ với [A-Za-z] mà cảm thấy không cần thiết tiết và trung tâm Mỹ. Có cách nào tốt hơn để làm điều này? Một cái gì đó như [\ w^_] (Tôi nghi ngờ tôi đã có cú pháp đúng)?Cách tốt nhất để chỉ khớp các chữ cái trong một regex là gì?
Trả lời
Bạn có thể sử dụng /[a-z]/i
hoặc /[[:alpha:]]/
chỉ là tốt. Trên thực tế, \w
bao gồm các số để thậm chí không hoạt động.
Tôi lấy nó là 'i' làm cho nó không phân biệt chữ hoa chữ thường ? – keithjgrant
Đúng vậy. – mkb
Đây chỉ là câu trả lời không chính xác. Đọc dưới đây. –
Có lẽ bạn muốn nói là /[[:alpha:]]/
? Xem perlre để thảo luận về các lớp nhân vật POSIX.
[^\W0-9_]
# or
[[:alpha:]]
Xem perldoc perlre
bạn đang tìm kiếm quốc tế hóa trong regex của mình? sau đó bạn sẽ cần phải làm một cái gì đó giống như anh chàng này đã làm: JavaScript validation issue with international characters
rõ ràng phù hợp trên tất cả các chữ tiếng trăng :)
Một vài lựa chọn:
1. /[a-z]/i # case insensitive
2. /[A-Z]/i # case insensitive
3. /[A-z]/ # explicit range listing (capital 'A' to lowercase 'z')
4. /[[:alpha:]]/ # POSIX alpha character class
tôi khuyên bạn nên sử dụng một trong hai trường hợp không nhạy cảm, hoặc theo cách thực sự /[a-zA-z]/
, trừ khi bạn có một sở thích ngôn ngữ nhất định trong tâm trí.
Lưu ý:
- Số 3 đòi hỏi vốn 'A' đầu tiên và sau đó thường 'z' vì thứ tự của các giá trị ASCII; nó không hoạt động nếu bạn làm ngược lại:
a-Z
. Ngoài ra: phương pháp này sẽ không đạt tiêu chí không có gạch dưới vì nó bao gồm[\]^_ `. - Số 4 sẽ phù hợp trên những ký tự ngôn ngữ bổ sung, nhưng nó cũng phù hợp trên:
ʹʺʻˍˎˏːˑˬˮ̀́
(cộng với nhiều người khác)
Phạm vi '[A-z]' bao gồm một loạt các ký tự khác. – NullUserException
Bạn chính xác có một vài dấu ngoặc và các ký tự thừa, điều này sẽ phá vỡ các tiêu chí không có gạch dưới. Tôi đã sửa đổi câu trả lời. @ bướm, vâng nhưng tôi đã sai. Thực sự là hai đầu tiên là cùng một phương pháp, chỉ hiển thị bạn có thể sử dụng đầu vào khác nhau. – vol7ron
Matching nhân vật quốc tế (tức là phi ASCII) là loại khó khăn, và có thể phụ thuộc vào rất nhiều thứ. Kiểm tra ví dụ này:
#!perl -w
use strict;
use utf8;
my $string = "ä";
print "matched :alpha:\n" if $string =~ /[[:alpha:]]/;
print "matched ^\\W0-9_\n" if $string =~ /[^\W0-9_]/;
print "matched [a-zA-Z]\n" if $string =~ /[a-zA-Z]/;
print "matched [a-z]i\n" if $string =~ /[a-z]/i;
print "matched [A-z]\n" if $string =~ /[A-z]/;
Đối với tôi điều này dẫn đến
matched :alpha:
Nếu bạn loại bỏ các use utf8
sau đó không ai trong số các trận đấu biểu thức thông thường.
Nhìn vào this very relevant question, có vẻ như bạn có thể muốn use utf8
và kiểm tra Unicode::Semantics.
Tất nhiên, nếu bạn đang sử dụng các ký tự ASCII thẳng hơn bất kỳ biểu thức chính quy nào nói trên sẽ hoạt động.
Bạn phải cẩn thận với \ w và \ W trong Perl. Đó là một chút của một mục tiêu di chuyển gần đây, vì vậy tôi sẽ không phụ thuộc vào định nghĩa của nó. –
Trình chỉnh sửa của bạn hiển thị là 'ä' có thể không phải là một chữ cái trong Perl. 'ä' = "\ xE4" không được định nghĩa trong bộ ký tự ASCII, theo mặc định, Perl sẽ sử dụng các lớp ký tự ASCII cho chuỗi không được mã hóa dưới dạng UTF8. Việc thêm 'use utf8;' sẽ xử lý mã nguồn của bạn là UTF8 và tạo chuỗi "ä" Unicode. Trong bộ ký tự Unicode 'ä' là ký tự alpha. So sánh '$ string =" ä ";' vs '$ string = decode (" iso-8859-1 "," ä ");' không 'dùng utf8;'. Trong trường hợp đầu tiên, Perl sẽ thấy dữ liệu nhị phân, trong dữ liệu nhị phân thứ hai được hiểu là Latin-1 và được chuyển thành UTF-8. –
Chỉ cần sử dụng \p{L}
có nghĩa là "bất kỳ chữ cái Unicode nào" và hoạt động trong Perl (/\p{L}/
). Bạn có thể cần phải use utf8;
.
- 1. Làm thế nào để đối sánh các chữ cái chỉ bằng cách sử dụng java regex, phương thức khớp?
- 2. Thực tiễn tốt nhất: So khớp một phần Regex
- 3. Cụm từ thông dụng chỉ khớp với các chữ cái
- 4. regex chỉ bằng dấu cách và chữ cái?
- 5. Cách so khớp các chữ số trong regex
- 6. Regex để khớp tất cả các ký tự ngoại trừ chữ cái và số
- 7. Cách tốt nhất để tạo ra tất cả các chuỗi ba chữ cái có thể là gì?
- 8. Chữ cái lớp trong Java là gì?
- 9. Regex để xóa các chữ cái, ký hiệu trừ số
- 10. cách nhanh nhất để liệt kê các bảng chữ cái
- 11. Cách tốt nhất để tạo một mảng chỉ đọc trong C# là gì?
- 12. Chữ ký tốt nhất cho clone() trong C++ là gì?
- 13. Regex chỉ cho phép các chữ cái và một số ký tự
- 14. Cách tốt nhất để hợp nhất một tập hợp hình chữ nhật trong một hình ảnh là gì?
- 15. Cách tốt nhất để băm url trong ruby là gì?
- 16. Regex Để tìm các từ có chữ cái thiếu
- 17. Cách tốt nhất để phân tích chuỗi là gì?
- 18. Cách tốt nhất để tăng một điều tra là gì?
- 19. Làm cách nào để Regex chỉ khớp với các kết quả khớp chính xác?
- 20. Cách tốt nhất để lấy đoạn văn bản trong một khối chữ WPF là gì? (các ký tự dòng mới?)
- 21. Regex có khớp với một nhóm chữ số cụ thể có độ dài nhất định không?
- 22. Cách tốt nhất để loại bỏ các bản sao trong một mảng trong Java là gì?
- 23. Khớp không gian trong regex
- 24. Đang cố gắng tìm các nhóm chữ cái bằng regex
- 25. Cụm từ thông dụng để khớp với chuỗi chữ cái và yêu cầu ít nhất một chữ hoa và một chữ thường (vb.net)
- 26. Phông chữ nhỏ tốt nhất cho nhật thực là gì?
- 27. Cách tốt nhất để chỉ cho phép một tệp PHP được bao gồm là gì?
- 28. Cách tốt nhất để lớp trong Canvas HTML5 là gì?
- 29. Là cách duy nhất của ExpitExceptionAttribute chỉ để kiểm tra nếu một cái gì đó làm tăng một ngoại lệ?
- 30. Regex để khớp với SHA1
'[A-Za-z]' không phải là Mỹ làm trung tâm, đó là trung tâm ASCII. – CanSpice
@CanSpice, tôi muốn nói đó là trung tâm Latin, vì ASCII chỉ sử dụng bảng chữ cái latin. – Axeman
@Axeman, Nguồn? AFAIK nhiều ngôn ngữ có nguồn gốc từ tiếng Latin đã nhấn mạnh các nguyên âm và chữ cái. [A-Za-z] sẽ không khớp với Español lẫn Française. Ngay cả Latin tinh khiết cũng có Æ glyph không nằm trong ASCII. Bạn đang nói về tiếng Latin nào? – Kyordhel