2016-09-23 4 views
-2

Zuerst möchte ich Ihnen danken, dass Sie sich die Zeit genommen haben, meine Frage zu lesen.Erstellen eines regulären Ausdrucks für diese Art von Daten

Ich versuche, einen regulären Ausdruck zu schreiben, um verschiedene Formate von Daten zu erkennen, und ich habe viele Fragen diesbezüglich gefunden, aber keine, die meinen Anforderungen entsprechen.

Hier sind einige Beispiele von dem, was ich brauche

16 SEPTEMBER 2016 
October 2016 
8/2016 
11/03/2016 

und das ist das Stück Code zu erkennen, ich begann, ich irgendwie stecken geblieben und weiß nicht, wie von hier zu gehen. Was ich will, im Grunde zu tun ist, pro/mehr als 1 Option haben, zum Beispiel in Worten oder Zahlen und Jahr Monat können, können 93 oder 1993

hier sein ist mein Code

(\d\d)+]?.?(\d\d)?\w{3,9}?.(\d\d\d\d)?|(\d\d)? 

Thank you so viel für deine Antworten im Voraus!

+0

Ich verstehe nicht. Können Sie uns verschiedene Beispiele für Strings zeigen? Testen Sie dies in Javascript, ist das gleiche für php: '16 SEPTEMBER 2016 Oktober 2016 8/2016 11/03/2016'.match (/ ([0-9] +) ([a-zA-Z] +) ([0 -9] +) ([a-zA-Z] +) ([0-9] +) ([0-9] +) \/([0-9] +) ([0-9] +) \/([0-9] +) \/([0-9] +) /) – Laurianti

+0

Siehe https://regex101.com/r/kU2xB5/1. Es könnte mehr Datumsformate passen, als Sie brauchen :) –

Antwort

0

Ich bin mit PHP nicht vertraut, aber da PHP verwendet Perl Regex Funktionen als Erweiterung, hier ist ein Perl-Programm, das aus einem Array Daten ausdruckt:

#!/usr/bin/perl 

@array = ('16 SEPTEMBER 2016', 'October 2016', '8/2016', '18/2016', '11/03/2016', 'NOT A DATE 3534'); 

for $date (@array){ 
    if($date =~ /^(\d{1,2} [A-Za-z]+ \d{4}$)|(^[A-Za-z]+ \d{4}$)|(^\d{1,2}\/\d{4}$)|(^\d{2}\/d{2}\/\d{4}$)/){ 
     print "$date\n"; 
    } 
} 

Bei Bedarf können Sie eine etwas schreiben konnte komplexeres Programm, das mit einer Liste akzeptabler Monate vergleicht, anstatt mit einer Buchstabenfolge übereinzustimmen.

Lassen Sie mich wissen, ob dies hilft.

+0

danke irfan :) Ich habe Sie aufgewertet – Alex

Verwandte Themen