2012-01-28 25 views
29

Tôi muốn biết regex khớp với các từ sao cho các từ có độ dài tối đa. ví dụ: nếu một từ có độ dài tối đa 10 ký tự, tôi muốn regex khớp, nhưng nếu độ dài vượt quá 10 thì regex sẽ không khớp.Regex để đối sánh các từ có độ dài nhất định

tôi đã cố gắng

^(\w{10})$ 

nhưng điều đó mang lại cho tôi phù hợp chỉ khi độ dài tối thiểu của từ này là 10 ký tự. Nếu từ có nhiều hơn 10 ký tự, từ đó vẫn khớp, nhưng chỉ khớp với 10 ký tự đầu tiên.

+0

Có lý do nào khiến bạn không muốn đơn giản lặp qua các từ và sử dụng 'String.length()'? – MAK

+1

Có. Chuỗi này là một phần của chuỗi lớn hơn có chứa các từ của một số định dạng - ngày, email, url, v.v. tất cả trong định dạng được phân cách bằng tab. Tôi đang nghĩ để viết một regex tổng hợp để phù hợp với toàn bộ dòng. –

+0

Tôi hiểu. Vì các từ được phân cách bởi các tab, không phải là nó có thể phân chia chúng (bằng cách sử dụng 'String.split()' hoặc 'StringTokenizer') và sau đó nhìn vào từng chiều dài từ? – MAK

Trả lời

39

Tôi nghĩ bạn muốn \w{1,10}\b. \b khớp với ranh giới từ.

Tất nhiên, bạn cũng có thể thay thế \b và làm ^\w{1,10}$. Điều này sẽ phù hợp với một từ có tối đa 10 ký tự miễn là nội dung duy nhất của chuỗi đó. Tôi nghĩ rằng đây là những gì bạn đã làm trước đây.

Vì đó là Java, bạn sẽ thực sự phải thoát khỏi các dấu gạch chéo ngược: "\\w{1,10}\\b". Bạn có thể đã biết điều này rồi, nhưng nó đã giúp tôi trước đó.

+0

Cảm ơn. Tôi chắc chắn rằng lối thoát đã nhận tôi trước đây ..: 0 Biểu thức bạn đã cung cấp khớp với 10 ký tự nếu từ lớn hơn 10. Tôi không muốn nó khớp nếu từ vượt quá 10 ký tự. Phân loại ngược lại với \ w {10,} bạn có thể nói ...! –

+1

@AnandHemmige: Biểu thức nào? Người có '\ b' không được khớp với bất kỳ thứ gì nếu có nhiều hơn 10 ký tự trong từ. Điều này cũng đúng cho kết thúc bằng '$'. Bạn nên thử sau nếu chuỗi chỉ là một từ. –

+1

Trong phiên bản VI của tôi (gvim cho Windows), tôi cần một dấu gạch chéo ngược (\\) trước '{' để làm việc này. –

25
^\w{0,10}$ # allows words of up to 10 characters. 
^\w{5,}$ # allows words of more than 4 characters. 
^\w{5,10}$ # allows words of between 5 and 10 characters. 
+0

Tôi hy vọng rằng việc đầu tiên trong số này sẽ hoạt động như một loại đối lập với \ w {10,} nhưng nó không thành công. –

+3

'^' và '$' gắn regex vào đầu và cuối của chuỗi. Nếu bạn muốn trích xuất các phần con (các từ có độ dài nhất định), thì bạn cần sử dụng '\ b' các neo ranh giới từ trong vị trí của chúng:' \ b \ w {1,10} \ b' sẽ tìm các từ có độ dài 1 đến 10. –

14

Độ dài của các ký tự cần khớp.

{n,m} n <= length <= m 
{n} length == n 
{n,} length >= n 

Và theo mặc định, động cơ tham lam phù hợp với mẫu này. Ví dụ: nếu đầu vào là 123456789, \ d {2,5} sẽ khớp 12345 với chiều dài 5.

Nếu bạn muốn động cơ trả về khi độ dài 2 phù hợp, hãy sử dụng \ d {2,5}?

+1

Điều này rất hữu ích đối với tôi khi tôi đang tìm regex để tìm các từ lớn hơn x. – Zenil

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