I don't think a regex is the simplest and most maintainable way to get this
information.  I think it is probably better to take advantage of the
structure of the string to discard and find information:

#!/usr/bin/perl

use strict;
use warnings;

for my $s (qw/binutils-2.23.52.0.1-12.el7.x86_64
compat-libcap1-1.10-3.el7.x86_64 compat-libstdc++-33-3.2.3-71.el7.i686/) {
my @dots = split /\,/, $s;
pop @dots; #get rid of architecture
pop @dots; #get rid of os
my $name_and_version = join "", @dots;
my @dashes = split /-/, $s;
my $build = pop @dashes;
my $version = pop @dashes;
my $name = join "-", @dashes;
print "n $name v $version b $build\n";
}



On Fri, Jul 27, 2018 at 8:57 AM Asad <asad.hasan2...@gmail.com> wrote:

> Hi All ,
>
>          I want to get a regex to actually get the rpm name and version
> for comparison :
>
>
> binutils-2.23.52.0.1-12.el7.x86_64",
> compat-libcap1-1.10-3.el7.x86_64"
> compat-libstdc++-33-3.2.3-71.el7.i686
>
> (^[a-zA-Z0-9\-]*)\-\d'
>
> First part of the regular expression is ^[a-zA-Z0-9\-]
>
> which means search for anything that begins with a letter
>
> (lower or upper) or a number up until you reach an
>
> hyphen sign (‘-‘).
>
> but it fails to match
>
> compat-libstdc++-33-3.2.3-71.el7.i686
>
> Please let me know what regex should i use to extract all 3
>
> rpms.
>
> Also let me know if there are web tools to build regex
>
> Good websites for regex tutorials.
>
>
>
>
> Thanks,
>
>
>
>
>
> --
> Asad Hasan
> +91 9582111698 <+91%2095821%2011698>
>

Reply via email to