2011-11-29 21 views
28

Tôi muốn phân tích cú pháp chuỗi hh:mm:ss. Một đơn giản là ([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d) mà dự kiến ​​là 2:3:24 hoặc 02:03:24 chuỗi.Mẫu regex cho HH: MM: Chuỗi thời gian SS

tôi muốn mang nó một bước xa hơn và vượt qua xác nhận ngay cả trong trường hợp như thế

  1. nếu bạn nhập chỉ 56, nó phải được vượt qua, như 56 có thể được coi như 56 giây [SS]
  2. nếu bạn nhập 2: 3 hoặc 02:03 hoặc 02: 3 hoặc 2:03 nó sẽ vượt qua. 2 phút và 3 giây [MM: SS]
  3. Nếu bạn nhập 20:30:12 vượt qua với 20 giờ, 30 phút và 12 giây [HH: MM: SS]
  4. nếu bạn nhập 78:12, không vượt qua 78 phút là sai ....

Về cơ bản, nếu tìm thấy ":", hãy xem số trước ":" là MM và số sau ":" là SS . Nếu hai ":" được tìm thấy là HH: MM: SS

Tôi đã đưa ra mô hình này.

(^([0-1]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$)|(^([0-5]?\d):([0-5]?\d)$)|(^[0-5]?\d$) 

Dường như nó hoạt động tốt. Tôi muốn biết bất kỳ biểu thức thông thường đơn giản nào khác, có thể thực hiện công việc.

+0

Đối với yêu cầu của bạn, trông giống như một rõ rệt regex đơn giản. –

Trả lời

92
^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$ 

Giải thích:

^     # Start of string 
(?:     # Try to match... 
(?:    # Try to match... 
    ([01]?\d|2[0-3]): # HH: 
)?     # (optionally). 
([0-5]?\d):  # MM: (required) 
)?     # (entire group optional, so either HH:MM:, MM: or nothing) 
([0-5]?\d)   # SS (required) 
$     # End of string 
+2

Cảm ơn rất nhiều. Điều này đơn giản và tuyệt vời hơn nhiều.Tôi muốn học regex. Hãy chỉ cho tôi đi đúng hướng. Làm thế nào để tôi học regex. Tất cả những gì tôi biết hiện nay là cú pháp cơ bản (loại hướng dẫn nhanh về công cụ) – user418836

+7

@ user418836: Kiểm tra www.regular-expressions.info –

+2

@ user418836 - làm thế nào về một upvote cho Tim. –

4

@ Tim Pietzcker bao gồm yêu cầu của OP cho một HH: MM: SS phân tích cú pháp nơi SS là bắt buộc, tức là

  • HH: MM: SS
  • MM: SS
  • SS

Nếu bạn cho phép tôi để đi chệch khỏi yêu cầu của OP cho một chút, và xem xét một trường hợp hộ gia đình là bắt buộc, tức là

  • HH
  • HH: MM
  • HH: MM: SS

Các regex tôi đã đưa ra là:

^([0-1]?\d|2[0-3])(?::([0-5]?\d))?(?::([0-5]?\d))?$ 

Hãy phá vỡ nó xuống:

  • ([0-1]?\d|2[0-3]) - trận đấu trong nhiều giờ
  • (?::([0-5]?\d))? - tùy chọn phù hợp cho phút
  • (?::([0-5]?\d))? - tùy chọn phù hợp cho giây