सबसे पहले, आप पर चेतावनी था "/^\d{4}\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{3}$/";
को देखो तुम मिल गया है चाहिए:
Unrecognized escape \d passed through at C:\temp\jj.pl line 7.
Unrecognized escape \D passed through at C:\temp\jj.pl line 7.
Unrecognized escape \d passed through at C:\temp\jj.pl line 7.
…
यदि आप REGEXP1
के मान को प्रिंट करते हैं, तो आपको /^d{4}Dd{2}Dd{2}Dd{2}Dd{2}Dd{2}Dd{3}
(* प्रतीक्षा करें, $/
क्या हुआ?)। जाहिर है, यह आपके इच्छित पैटर्न की तरह दिखता नहीं है।
अब, आप "/^\\d{4}\\D\\d{2}\\D\\d{2}\\D\\d{2}\\D\\d{2}\\D\\d{2}\\D\\d{3}\$/"
टाइप कर सकते हैं और फिर उस स्ट्रिंग को पैटर्न में विभाजित कर सकते हैं, लेकिन यह बहुत अधिक काम है। इसके बजाय, आप अपने निरंतर regexp quote operator, qr
का उपयोग कर परिभाषित कर सकते हैं: \d
और \D
सिर्फ [0-9]
और [^0-9]
की तुलना में अधिक क्रमश: मिलान हो जाएगा:
#!/usr/bin/env perl
use 5.012;
use strict;
use warnings;
use constant REGEXP1 => qr/^\d{4}\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{2}\D\d{3}$/;
my $s = "2013-03-20 11:09:30.788";
say $s =~ REGEXP1 ? 'yes' : 'no';
एक और पकड़ लिया है। तो, बजाय, आप की तरह अपने पैटर्न लिख सकते हैं:
use constant REGEXP1 => qr{
\A
(?<year> [0-9]{4}) -
(?<month> [0-9]{2}) -
(?<day> [0-9]{2}) [ ]
(?<hour> [0-9]{2}) :
(?<min> [0-9]{2}) :
(?<sec> [0-9]{2}) [.]
(?<msec> [0-9]{3})
\z
}x;
लेकिन, आप अभी भी है कि क्या उन मूल्यों को सार्थक कर रहे हैं के सवाल के साथ छोड़ दिया जाता है। यदि यह मायने रखता है, तो आप DateTime::Format::Strptime का उपयोग कर सकते हैं।
#!/usr/bin/env perl
use 5.012;
use strict;
use warnings;
use DateTime::Format::Strptime;
my $s = "2013-03-20 11:09:30.788";
my $strp = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%d %H:%M:%S.%3N',
on_error => 'croak',
);
my $dt = $strp->parse_datetime($s);
say $strp->format_datetime($dt);
स्रोत
2013-03-20 04:02:17
'[0-9]' के बाहर '\ d' और' \ D' मिलान क्या करते हैं? – RickF
[perldoc perlrecharclass] में "अंक" देखें (http://perldoc.perl.org/perlrecharclass.html)। * इसका अर्थ यह है कि जब तक '/ a' संशोधक प्रभावी नहीं होता है \ n' न केवल अंकों '' 0 '-' 9'' से मेल खाता है, बल्कि अरबी, देवनागरी और अन्य भाषाओं के अंक भी मेल खाता है। इससे कुछ भ्रम हो सकता है, और कुछ सुरक्षा समस्याएं हो सकती हैं। * –