2016-04-14 49 views
0

Düzgün çalışması için bu regex'i almaya çalışıyorum, ancak bunu yapamıyorum. Zaman saati desteği ile birlikte 12 Saat Zaman Damgası için Regex

Temelde kez bu kombinasyonları almak için regex gerekir:

12am 
12:30am 
12am - 12pm 
12:30am - 1:30am 
12:30 - 1:30am 
12 - 1:30am 

Ben eklerseniz? ([a | p] m) bölümümün arkasında, regex yapmak istemediğim numaralarla eşleşir.

İşte benim regex kodu:

(?:(1[012]|[1-9]):([0-5][0-9])|(1[012]|[1-9])) ?([a|p]m)(?:\s-\s(?:(1[012]|[1-9]):([0-5][0-9])|(1[012]|[1-9])) ?([a|p]m))? 

Herhangi bir yardım takdir, teşekkür ederim.

+0

alışkanlık yeterli https://regex101.com/r/gN1qS7/3? – rock321987

+0

Bazı yerlere '' 'eklemeniz gerekiyor (bkz. [Demo] (https://regex101.com/r/cN7yK1/1)). –

+0

@ rock321987 Bu hile yapmak, ancak hala kendi "12" kadar alır, e-posta içeriği ile bu regex çalıştırıyorum ve örneğin bir tarih eşleşecek gibi görünüyor: "12 Şubat" –

cevap

1

Bu işliyor:

((?:1[0-2]|\d)(?:\:[0-5]\d)?(?:[ap]m)?)[\s-]+((?:1[0-2]|\d)(?:\:[0-5]\d)?(?:[ap]m)?) 

Live Demo.

açıklama (ikinci grup birinci aynıdır):

1st Capturing group ((?:1[0-2]|\d)(?:\:[0-5]\d)?(?:[ap]m)) 

(?:1[0-2]|\d) Non-capturing group 
    1st Alternative: 1[0-2] 
     1 matches the character 1 literally 
     [0-2] match a single character present in the list below 
      0-2 a single character in the range between 0 and 2 
    2nd Alternative: \d 
     \d match a digit [0-9] 
(?:\:[0-5]\d)? Non-capturing group 
    Quantifier: ? Between zero and one time, as many times as possible, giving back as needed [greedy] 
    \: matches the character : literally 
    [0-5] match a single character present in the list below 
     0-5 a single character in the range between 0 and 5 
    \d match a digit [0-9] 
(?:[ap]m) Non-capturing group 
    [ap] match a single character present in the list below 
     ap a single character in the list ap literally (case insensitive) 
    m matches the character m literally (case insensitive) 

[\s-]+ match a single character present in the list below 

Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
\s match any white space character [\r\n\t\f ] 
- the literal character - 
+0

Ben muhtemelen bu aptal yazdım Ancak, 12 saat 1:30 pm kullanılarak alınacak 4 örneğe ihtiyacım olması gerektiği zaman alınmamalı. –

+0

@JohnnyDoey bkz. Düzenlemek –

+0

Yukarıdaki yazıyı daha fazla örnekle düzenledim, ayrıca "12am" ile birlikte "12am" almak için normal ifadeyi kullanmam gerekiyor. –