2011-07-19 33 views
9

Tôi hơi bối rối với một regex cụ thể có vẻ đơn giản.Regex đơn giản, khớp với bất kỳ chuỗi nào có ít nhất một dấu gạch ngang

Kết quả trùng khớp phải là chuỗi chỉ có a-z, A-Z, 0-9 và phải có ít nhất một lần xuất hiện của ký tự '-' ở bất kỳ đâu trong chuỗi.

Tôi có [a-zA-Z0-9-]+ nhưng vấn đề là, nó cũng sẽ khớp với những người không có ký tự '-'.

ABC123-ABC //should match 

ABC123ABC //shouldn't match. 

Trả lời

19

này nên làm việc:

^([a-zA-Z0-9]*-[a-zA-Z0-9]*)+$ 

Ngoài ra nếu bạn muốn có chính xác 135 có dấu gạch nối:

^([a-zA-Z0-9]*-[a-zA-Z0-9]*){135}$ 

hoặc nếu bạn muốn có ít nhất 23 dấu gạch nối nhưng không quá 54 dấu gạch ngang:

^([a-zA-Z0-9]*-[a-zA-Z0-9]*){23,54}$ 

Bạn nhận được điểm :)

+0

Cảm ơn, hãy làm s có được thực sự dài gió nếu bạn đã yêu cầu n số dấu gạch nối? – maxp

+1

Chỉ cần thông tin: regex đầu tiên được cung cấp trong bài đăng này ('^ [a-zA-Z0-9] * - [a-zA-Z0-9] * $') khớp với _exactly_ một dấu gạch ngang, vì vậy nếu bạn muốn _at ít nhất_ một dấu gạch ngang (như đã nêu trong bài đăng gốc của bạn), bạn nên quấn nó giống như các ví dụ khác và thêm ** + **: '^ ([a-zA-Z0-9] * - [a-zA-Z0-9] *) + $ ' –

+0

Điều này thậm chí sẽ khớp với chuỗi có chỉ. Nếu chúng ta luôn luôn cần phải bao bọc giữa các chữ cái thì chúng ta có thể sử dụng ([a-zA-Z0-9] + - [a-zA-Z0 -9] +) Tôi đã thử nó nhưng nó không phù hợp một cách chính xác. Đó là một phần của chuỗi một lần phù hợp sẽ không được xem xét cho lần thứ hai? Xin lỗi tôi mới trong regex và bối rối. –

2

Dưới đây là một regex đơn giản:

^(?=.*-)[a-zA-Z0-9-]+$ 
2

giải pháp Phêrô: (^([a-zA-Z0-9]*-[a-zA-Z0-9]*)+$) hoạt động tốt khi đưa ra một chuỗi phù hợp. Tuy nhiên, biểu hiện này kinh nghiệm Catastrophic Backtracking khi trình bày với một chuỗi không phù hợp như:

aa-aa-aa-aa-aa-aa-aa-aa-aa-aa-aa-aa%

Dưới đây là biểu thức thông thường mà tránh vấn đề này:

^[a-zA-Z0-9]*-[-a-zA-Z0-9]*$ # Match one or more -

^([a-zA-Z0-9]*-){5}[a-zA-Z0-9]*$ # Match exactly 5 -

^([a-zA-Z0-9]*-){1,5}[a-zA-Z0-9]*$ # Match from 1 to 5 -

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