regex ile yardım -

1 Cevap php

Ben bir dize adlandırılmış alt grupların almak için php preg_match kullanıyorum. Ben iyi formatlanmış tarih / zaman belirteçleri içine kullanıcı tarafından oluşturulan tarih / saat dizeleri ayrıştırma.

İşte benim regex bulunuyor

~(?P<month>\d?\d)(/|-)(?P<day>\d?\d)(/|-)(?P<year>\d\d\d?\d?) +(?P<time>[\d: +((A|a)|(P|p))(M|m)]+)~i

Ve doğru gibi tarihleri ​​ayrıştırır

01-17-10 09:30 pm
2/1/2010 06:19am

kendi kurucu bölüme. Ancak, bunu yapmak için değil istiyorum hiçbir AM / PM dize ile, 02/11/2010 06:19 kabul eder. Ben yanlış ne yapıyorum?

1 Cevap

Size zaman ifade için karakter sınıfını [\d: +((A|a)|(P|p))(M|m)] kullanıyorsunuz. Bu karakter kümesi tanımlanmış bir desene sahip olan yalnızca bir karakter değil, bir dizi açıklar.

Try (?P<time>\d\d?:\d\d *[ap]m) yerine:

~(?P<month>\d\d?)(/|-)(?P<day>\d\d?)(/|-)(?P<year>\d\d\d?\d?) +(?P<time>\d\d?:\d\d *[ap]m)~i