2013-10-08 14 views
10

Tôi đang gặp sự cố khi tạo Regex để phù hợp với sên URL (về cơ bản, chữ "chữ" ngăn cách bởi đơn dấu gạch ngang)Regex để phù hợp với một con sên?

this-is-an-example 

tôi đã đi lên với Regex này: /[a-z0-9\-]+$/ và trong khi nó hạn chế chuỗi chỉ với các ký tự chữ và số và dấu gạch ngang, nó vẫn tạo ra một số kết quả dương tính giả như sau:

-example 
example- 
this-----is---an--example 
- 

Tôi rất xấu với biểu thức chính quy, vì vậy mọi trợ giúp sẽ được đánh giá cao.

+0

Ngôn ngữ lập trình nào? – zzzzBov

+0

@zzzzBov Tôi đang sử dụng PHP (với hàm preg_match). – federicot

Trả lời

37

Bạn có thể sử dụng này:

/^ 
    [a-z0-9]+ # One or more repetition of given characters 
    (?:   # A non-capture group. 
    -   # A hyphen 
    [a-z0-9]+ # One or more repetition of given characters 
)*   # Zero or more repetition of previous group 
$/ 

này sẽ phù hợp:

  1. Một chuỗi các ký tự chữ và lúc đầu.
  2. Sau đó, nó sẽ khớp với dấu gạch nối, sau đó là chuỗi ký tự chữ và số, 0 hoặc nhiều lần.
+0

Tuyệt vời! Điều này hoạt động _almost_ như tôi muốn. Bạn có thể tinh chỉnh nó để phù hợp với một từ duy nhất không? (Tôi quên đề cập đến những từ đơn lẻ được coi là sên hợp lệ). – federicot

+1

@fedeetz: Chỉ thay thế '+' cuối cùng bằng '*' (0 hoặc nhiều kết quả phù hợp) – anubhava

+0

@fedeetz Tinh chỉnh. –

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