Loading ...
Sorry, an error occurred while loading the content.

Re: [PBML] regexp

Expand Messages
  • David Precious
    ... Nearly anything is possible :) What part of the string are you talking about? the 18:00 after the - ? If not, please provide an example of what you
    Message 1 of 9 , Nov 4, 2011
    • 0 Attachment
      On Friday 04 November 2011 19:46:34 Weder Prado wrote:
      > Hi,
      > I am learning perl and I need to create a regexp that extract only the 4
      > digits after the "-"
      > Below the string:
      >
      > 20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074 49=FIX134800
      > 52=20111014-18:00:14.474 56=BVMF 112=TEST 10=191
      >
      > Is it possible?

      Nearly anything is possible :)

      What part of the string are you talking about? the "18:00" after the "-"? If
      not, please provide an example of what you expect to capture.

      You could quite easily use split to split the string on the '-', then substr
      to fetch the characters you want.

      Alternatively, e.g.:

      my ($time) = $foo =~ /-(\d{2}:\d{2})/;

      ... would assign the '18:00' to $time, if that's what you were looking for.
    • Shawn H Corey
      ... Yes, try: m{ # start of match - # match a hyphen D* # skip non-digits ( d) # capture first digit D* # skip non-digits ( d) # capture
      Message 2 of 9 , Nov 4, 2011
      • 0 Attachment
        On 11-11-04 03:46 PM, Weder Prado wrote:
        > I am learning perl and I need to create a regexp that extract only the 4
        > digits after the "-"
        > Below the string:
        >
        > 20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074 49=FIX134800
        > 52=20111014-18:00:14.474 56=BVMF 112=TEST 10=191
        >
        > Is it possible?

        Yes, try:

        m{ # start of match
        \- # match a hyphen
        \D* # skip non-digits
        (\d) # capture first digit
        \D* # skip non-digits
        (\d) # capture second digit
        \D* # skip non-digits
        (\d) # capture third digit
        \D* # skip non-digits
        (\d) # capture fourth digit
        }msx # end of match


        See:
        perldoc perlretut
        perldoc perlre


        --
        Just my 0.00000002 million dollars worth,
        Shawn

        Confusion is the first step of understanding.

        Programming is as much about organization and communication
        as it is about coding.

        The secret to great software: Fail early & often.

        Eliminate software piracy: use only FLOSS.

        "Make something worthwhile." -- Dear Hunter
      • Yatin Jadhav
        Try this it works........... $a = 20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074 49=FIX13480052=20111014-18:00:14.474 56=BVMF 112=TEST 10=191 ; @b =
        Message 3 of 9 , Nov 5, 2011
        • 0 Attachment
          Try this it works...........

          $a = "20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074 49=FIX13480052=20111014-18:00:14.474 56=BVMF 112=TEST 10=191";
          @b = split(m/-/,$a);
          @c = split(m//,$b[1]);
          print ("$c[0]$c[1]$c[2]$c[3]\n");



           
          Regards,
          Yatin Jadhav



          ________________________________
          From: Shawn H Corey <shawnhcorey@...>
          To: perl-beginner@yahoogroups.com
          Sent: Saturday, November 5, 2011 3:10 AM
          Subject: Re: [PBML] regexp


           
          On 11-11-04 03:46 PM, Weder Prado wrote:
          > I am learning perl and I need to create a regexp that extract only the 4
          > digits after the "-"
          > Below the string:
          >
          > 20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074 49=FIX134800
          > 52=20111014-18:00:14.474 56=BVMF 112=TEST 10=191
          >
          > Is it possible?

          Yes, try:

          m{ # start of match
          \- # match a hyphen
          \D* # skip non-digits
          (\d) # capture first digit
          \D* # skip non-digits
          (\d) # capture second digit
          \D* # skip non-digits
          (\d) # capture third digit
          \D* # skip non-digits
          (\d) # capture fourth digit
          }msx # end of match

          See:
          perldoc perlretut
          perldoc perlre

          --
          Just my 0.00000002 million dollars worth,
          Shawn

          Confusion is the first step of understanding.

          Programming is as much about organization and communication
          as it is about coding.

          The secret to great software: Fail early & often.

          Eliminate software piracy: use only FLOSS.

          "Make something worthwhile." -- Dear Hunter



          [Non-text portions of this message have been removed]
        • timothy adigun
          Hi Prado, ... output, instead, the output will be 18:0. I suppose you didn t put the *:* into consideration as part of the output, since you are you *split* on
          Message 4 of 9 , Nov 5, 2011
          • 0 Attachment
            Hi Prado,

            Yatin Jadhav <yatinjdhv@...> wrote:

            > **
            >
            >
            > Try this it works...........
            >
            > $a = "20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074
            > 49=FIX13480052=20111014-18:00:14.474 56=BVMF 112=TEST 10=191";
            > @b = split(m/-/,$a);
            > @c = split(m//,$b[1]);
            > print ("$c[0]$c[1]$c[2]$c[3]\n");
            >
            > print ("$c[0]$c[1]$c[2]$c[3]\n"); will not print 18:00, if that is the
            output, instead, the output will be 18:0. I suppose you didn't put the *:*
            into consideration as part of the output, since you are you *split* on the
            $b[1] according to your script.

            You could also write *print ("$c[0]$c[1]$c[2]$c[3]\n"); * more clearly as
            *print @c[ 0 .. 4 ];*, which i believe will be more error prone.

            Do one really have to go through all the trouble of array and split when,
            one could just use substitution and regex to extract what you want? Anyway,
            I guess, there is more than one way to do it!
            Try this:

            #!/usr/bin/perl -wl
            use strict;

            my $a =
            "20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074
            49=FIX13480052=20111014-18:00:14.474 56=BVMF 112=TEST 10=191";

            ( my $new_val = $a ) =~ s/^(\d+)-(\d{2}:\d{2})(?:.*)/$2/imgx;
            print $new_val;
            __END__
            OUTPUT: 18:00
            --
            Tim


            [Non-text portions of this message have been removed]
          • timothy adigun
            ... output, instead, the output will be 18:0. I suppose you didn t put the *:* into consideration as part of the output, since you are you *split* on the $b[1]
            Message 5 of 9 , Nov 5, 2011
            • 0 Attachment
              Yatin Jadhav <yatinjdhv@...> wrote:

              >
              >
              > Try this it works...........
              >
              > $a = "20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074
              > 49=FIX13480052=20111014-18:00:14.474 56=BVMF 112=TEST 10=191";
              > @b = split(m/-/,$a);
              > @c = split(m//,$b[1]);
              > print ("$c[0]$c[1]$c[2]$c[3]\n");
              >
              > print ("$c[0]$c[1]$c[2]$c[3]\n"); will not print 18:00, if that is the
              output, instead, the output will be 18:0. I suppose you didn't put the *:*
              into consideration as part of the output, since you are you *split* on the
              $b[1] according to your script.

              You could also write *print ("$c[0]$c[1]$c[2]$c[3]\n"); * more clearly as
              *print @c[ 0 .. 4 ];*, which i believe will be more error prone free.

              Do one really have to go through all the trouble of array and split when,
              one could just use substitution and regex to extract what you want? Anyway,
              I guess, there is more than one way to do it!
              Try this:

              #!/usr/bin/perl -wl
              use strict;

              my $a =

              "20111014-18:00:14.474 : 8=FIX.4.2 9=68 35=1 34=1074
              49=FIX13480052=20111014-18:00:14.474 56=BVMF 112=TEST 10=191";

              ( my $new_val = $a ) =~ s/^(\d+)-(\d{2}:\d{2})(?:.*)/$2/imgx;
              print $new_val;
              __END__
              OUTPUT: 18:00
              --
              Tim


              [Non-text portions of this message have been removed]
            Your message has been successfully submitted and would be delivered to recipients shortly.