Home > Enterprise >  How to extract substring using perl provided input string in specific format?
How to extract substring using perl provided input string in specific format?

Time:06-05

I have input string in following format(It may possible that after closing brackets space can be present).

(1, 'c21bd4d76fe97759aa27a0c99bff6710')

I want to extract number and id into different variables, how should I go about it?

I have tried following approach but I wanted something that will work with regex because extra space after input string breaks my solutions.

$text = "(1, 'c21bd4d76fe97759aa27a0c99bff6710')";
my @parts = split(/,/,$text);
my $rowd_id = substr(@parts[0],1);
my $id = substr(@parts[1],2,-2);
print "$rowd_id $id\n";

CodePudding user response:

You can use capture group in a regex:

my $text = "(1, 'c21bd4d76fe97759aa27a0c99bff6710')";
my $re = qr/\(\h*(\w )\h*,\h*'([^'] )'/;

my @captured = $text =~ $re;

if( @captured ) {
   my $rowd_id = @captured[0];
   my $id = @captured[1];
   print "$rowd_id :: $id\n";
}

Output:

1 :: c21bd4d76fe97759aa27a0c99bff6710

RegEx Details:

  • \(: Match a (
  • \h*: Match 0 or more whitespaces
  • (\w ): Match 1 word characters in capture group #1
  • \h*: Match 0 or more whitespaces
  • ,: Match a ,
  • \h*: Match 0 or more whitespaces
  • ': Match a '
  • ([^'] ): Match 1 of any characters that is not ' in capture group #2
  • ': Match a '
  • Related