> Yes the purpose is to compare the timestamps ans yes these are the only two formats .
Then you probably want to look at modules, like Date::Manip, google has lots of suggestions: https://stackoverflow.com/questions/4199504/what-is-the-best-way-to-compare-dates-in-perl https://www.perlmonks.org/?node_id=1100934 https://metacpan.org/pod/Class::Date The first advantage is they'll do the compare for you, the bigger one is they can parse those date strings automagically. YOu could look at the built-in POSIX::strftime (perldoc POSIX strftime Convert date and time information to string. Returns the string. Synopsis: strftime(fmt, sec, min, hour, mday, mon, year, wday = -1, yday = -1, isdst = -1) The month ("mon"), weekday ("wday"), and yearday ("yday") begin at zero. I.e. January is 0, not 1; Sunday is 0, not 1; January 1st is 0, not 1. The year ("year") is given in years since 1900. I.e., the year 1995 is 95; the year 2001 is 101. Consult your system’s "strftime()" manpage for details about these and the other arguments. If you want your code to be portable, your format ("fmt") argument should use only the conversion specifiers defined by the ANSI C standard (C89, to play safe). These are "aAbBcdHIjmMpSUwWxXyYZ%". But even then, the results of some of the conversion specifiers are non-portable. For example, the specifiers "aAbBcpZ" change according to the locale settings of the user, and both how to set locales (the locale names) and what output to expect are non-standard. The specifier "c" changes according to the timezone settings of the user and the timezone computation rules of the operating system. The "Z" specifier is notoriously unportable since the names of timezones are non-standard. Sticking to the numeric specifiers is the safest route. The given arguments are made consistent as though by calling "mktime()" before calling your system’s "strftime()" function, except that the "isdst" value is not affected. The string for Tuesday, December 12, 1995. $str = POSIX::strftime( "%A, %B %d, %Y", 0, 0, 0, 12, 11, 95, 2 ); print "$str\n"; you'll have to use the REs to get the pieces (month, date etc) out yourself that way. Convert the dates to epoch seconds and compare. You do, apparently, need to take into account timezones, as your date strings: Calling upgrade.sql on 05-JUL-18 10.19.42.559000 PM -12 Calling apply.sql on 17.10.18 12:28:12,447849 +02: one is -12 the other +2. With a little manipulation, those strings could be handled by the date utility $ date -d '05-JUL-18 10:19:42' Thu Jul 5 10:19:42 CDT 2018 $ date -d '10/17/18 12:28:12' Wed Oct 17 12:28:12 CDT 2018 so, for epoch seconds $ date -d '10/17/18 12:28:12' "+%s" 1539797292 $ date -d '05-JUL-18 10:19:42 ' "+%s" 1530803982 That's ignoring TZ On Tue, Nov 13, 2018 at 5:38 PM Asad <asad.hasan2...@gmail.com> wrote: > Hi Andy , > > thanks for the reply . Yes the purpose is to compare the > timestamps ans yes these are the only two formats . > > Thanks, > > On Wed, Nov 14, 2018 at 2:48 AM Andy Bach <afb...@gmail.com> wrote: > >> Calling upgrade.sql on 05-JUL-18 10.19.42.559000 PM -12 >> Calling apply.sql on 17.10.18 12:28:12,447849 +02: >> >> > I created on regex : \d\d\.\d\d\.\d\d\s[012][0-9]:[0-5][0-9]>:[0-5][0-9] >> > this only matches : Calling apply.sql on 17.10.18 12:28:12,447849 +02: >> >> Right as your first string has word chars for the month, not digits. So, >> a straight forward, if only lightly useful one would get both, but as >> they've got entirely different orders, you're not going to be able to do >> much with the result. You'd be better off looking at 2 separate ones, esp. >> if you know one will be prefixed by "upgrade" and the other by "apply" or >> some similar list of words: >> if ( $str =~ >> /upgrade.sql\s+on\s+(\d{2}-\w{3}-\d{2})\s+(012][0-9]:[0-5][0-9]:[0-5][0-9])/ >> # got $1 eq "date-mon-year" and $2 eq "hr-min-sec" >> or $str =~ >> /apply.sql\s+on\s+(\d{2}\.\d{2}\.\d{2})\s+([012][0-9]:[0-5][0-9]:[0-5][0-9])/ >> # got $1 eq "date.month.year" and $2 eq "hr-min-sec" >> ) { >> # date str's matched >> >> > I need a common regex which matches both the lines ? >> You might want to let us know why? What you're going to do w/ the match. >> Are you validating the strings and, if so, will you reject non-matches? >> Are you looking to break them up into parts, $date, $mon, $year ... ? >> Compare them, maybe to find the difference? Are these the only 2 formats >> you'll be looking at, that is, maybe some might be 17.10.2018, or 17-10-18? >> >> >> >> On Mon, Nov 12, 2018 at 6:49 AM Asad <asad.hasan2...@gmail.com> wrote: >> >>> Hi all , >>> >>> I have two stings from logfile how can we have a common regex >>> so that its parse datetime details for further parsing ; >>> >>> Calling upgrade.sql on 05-JUL-18 10.19.42.559000 PM -12 >>> Calling apply.sql on 17.10.18 12:28:12,447849 +02: >>> >>> I created on regex : \d\d\.\d\d\.\d\d\s[012][0-9]:[0-5][0-9]:[0-5][0-9] >>> this only matches : Calling apply.sql on 17.10.18 12:28:12,447849 +02: >>> >>> I need a common regex which matches both the lines ? >>> >>> >>> Thanks, >>> -- >>> Asad Hasan >>> +91 9582111698 >>> >> >> >> -- >> >> a >> >> Andy Bach, >> afb...@gmail.com >> 608 658-1890 cell >> 608 261-5738 wk >> > > > -- > Asad Hasan > +91 9582111698 > -- a Andy Bach, afb...@gmail.com 608 658-1890 cell 608 261-5738 wk