2010-02-25 83 views
39

Tôi không chắc chắn cách tôi có thể đạt được biểu thức đối sánh này. Hiện tại tôi đang sử dụng,Chữ cái Regex, số, dấu gạch ngang và dấu gạch dưới

([A-Za-z0-9-]+) 

... khớp với chữ cái và số. Tôi cũng muốn kết hợp trên dấu gạch ngang và dấu gạch dưới trong cùng một biểu thức. Có ai biết không?

Tôi muốn để có thể phù hợp với PRODUCT_NAMEsản phẩm tên tuổi

Trả lời

70

Chỉ cần thoát khỏi dấu gạch ngang để ngăn chặn chúng khỏi bị giải thích (Tôi không nghĩ gạch nhu cầu thoát, nhưng nó không thể làm tổn thương). Bạn không nói bạn đang sử dụng regex nào.

([A-Za-z0-9\-\_]+) 
+0

Theo dõi, làm cách nào để áp dụng các quy tắc trên trong khi loại trừ các khoảng thời gian? Tôi muốn bỏ qua, ví dụ: image.png –

+4

@George: Regex này không khớp với dấu chấm. –

+1

@George Vui lòng không hỏi những câu hỏi tiếp theo ở bất kỳ đâu ngoại trừ câu hỏi mới. Nhận xét không dành cho điều đó; câu trả lời không dành cho điều đó; nếu bạn có một câu hỏi mới, hãy đặt một câu hỏi mới. –

21

biểu hiện của bạn nên đã phù hợp với dấu gạch ngang, bởi vì trận chung kết - sẽ không được hiểu là một nhà điều hành phạm vi (từ dãy núi này không có kết thúc). Để thêm dấu gạch dưới là tốt, hãy thử:

([A-Za-z0-9_-]+) 
9

Tùy thuộc vào biến thể regex của bạn, bạn có thể có thể làm đơn giản này:

([\w-]+) 

Ngoài ra, bạn có thể không cần dấu ngoặc đơn trừ khi điều này là một phần của một biểu thức lớn hơn.

+0

Đây là một tệp .htaccess, vì vậy tôi cần các dấu ngoặc đơn vì bạn đã nói, nó có biểu thức lớn hơn :) –

+0

Điều này làm việc cho tôi và tôi nghĩ nó sạch hơn một chút khi sử dụng phím tắt 'từ'. Thực ra tôi đã sử dụng [\ w -] * –

0

Bạn thực sự có thể khớp với tất cả các ký tự đó, nhưng an toàn hơn để thoát khỏi số - để rõ ràng là nó được thực hiện theo nghĩa đen.

Nếu bạn đang sử dụng một POSIX variant bạn có thể chọn để sử dụng:

([[:alnum:]\-_]+)

Nhưng kể từ khi bạn được bao gồm dấu gạch chân tôi sẽ chỉ cần sử dụng:

([\w\-]+)

(làm việc tại tất cả các biến thể)

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