Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > searching for a pattern for multiple matches

Reply
Thread Tools

searching for a pattern for multiple matches

 
 
jhu
Guest
Posts: n/a
 
      11-24-2007
Can anyone tell me using Perl how to find all matching patterns. So if
I have this one big string of say a html web page which contains
multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
\d{1,3} then how do I go about setting up my code in some sort of
while loop to find all instances of matches ? Also can someone in
simple terms explain what a back reference is ? Is it simply the
pattern found ?

Thanks in advance
 
Reply With Quote
 
 
 
 
Ben Morrow
Guest
Posts: n/a
 
      11-24-2007

Quoth jhu <>:
> Can anyone tell me using Perl how to find all matching patterns. So if
> I have this one big string of say a html web page which contains
> multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> \d{1,3} then how do I go about setting up my code in some sort of
> while loop to find all instances of matches ?


Use the /g modifier. See 'Regexp Quote-Like Operators' in perldoc
perlop, particularly the section starting "In scalar context, each
execution of "m//g...".

> Also can someone in
> simple terms explain what a back reference is ? Is it simply the
> pattern found ?


perldoc perlretut

Ben

 
Reply With Quote
 
 
 
 
jhu
Guest
Posts: n/a
 
      11-24-2007
On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth jhu <jhu4...@yahoo.com>:
>
> > Can anyone tell me using Perl how to find all matching patterns. So if
> > I have this one big string of say a html web page which contains
> > multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> > \d{1,3} then how do I go about setting up my code in some sort of
> > while loop to find all instances of matches ?

>
> Use the /g modifier. See 'Regexp Quote-Like Operators' in perldoc
> perlop, particularly the section starting "In scalar context, each
> execution of "m//g...".
>
> > Also can someone in
> > simple terms explain what a back reference is ? Is it simply the
> > pattern found ?

>
> perldoc perlretut
>
> Ben


Ben thanks but I'm not on Unix or Linux but rather on Windows and
MV6.0.
 
Reply With Quote
 
Ben Morrow
Guest
Posts: n/a
 
      11-24-2007

Quoth jhu <>:
> On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> > Quoth jhu <jhu4...@yahoo.com>:
> >
> > > Can anyone tell me using Perl how to find all matching patterns. So if
> > > I have this one big string of say a html web page which contains
> > > multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> > > \d{1,3} then how do I go about setting up my code in some sort of
> > > while loop to find all instances of matches ?

> >
> > Use the /g modifier. See 'Regexp Quote-Like Operators' in perldoc
> > perlop, particularly the section starting "In scalar context, each
> > execution of "m//g...".
> >
> > > Also can someone in
> > > simple terms explain what a back reference is ? Is it simply the
> > > pattern found ?

> >
> > perldoc perlretut

>
> Ben thanks but I'm not on Unix or Linux but rather on Windows and
> MV6.0.


Huh? What difference does that make? Do you mean you can't find the
perldocs? perldoc works perfectly well on Win32, or ActivePerl installs
a nice HTMLified version in c:\perl\html.

If you mean 'I'm not actually using Perl, but some other system that
provides Perlish regexen' then: sorry, go ask somewhere else. This
newsgroup is for discussing Perl.

Ben

 
Reply With Quote
 
Dr.Ruud
Guest
Posts: n/a
 
      11-24-2007
jhu schreef:

> Can anyone tell me using Perl how to find all matching patterns. So if
> I have this one big string of say a html web page which contains
> multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> \d{1,3} then how do I go about setting up my code in some sort of
> while loop to find all instances of matches ?



#!/usr/bin/perl
use strict;
use warnings;

use Regexp::Common;

local $\ = "\n";

(my $big_string = join "", <DATA>) =~ s/\s*\n\s*/ /g;

print $big_string;
print "-" x 40;

my @ips = $big_string =~ m/$RE{net}{IPv4}/g;

print for @ips;

__DATA__
abc 123.45.6.78 xyz
abc 234.45.68.91 xyz
abc 123.456.78.9 xyz
abc 1.2.3.4 xyz
abc 123.45.678 xyz
abc 234.45.68.910 xyz
abc 1.2.3.4 xyz


See also:
http://search.cpan.org/~abigail/Rege.../Common/net.pm


> Also can someone in
> simple terms explain what a back reference is ? Is it simply the
> pattern found ?


A backreference is a sub-pattern. (The word pattern is traditionally
reserved for the whole search pattern.)

With a backreference, you reuse something that is already found by an
earlier capture in the pattern:

m/ ([aeiou]) \1 /x; # two vowels, equal
m/ [aeiou]{2} /x; # two vowels, maybe equal


Now read both perlre and perlretut.

In perlre you'll find:
"Referring back to another part of the match is called a backreference."

In perlretut you'll find:
"Backreferences are simply matching variables that can be used inside a
regexp. This is a really nice feature - what matches
later in a regexp can depend on what matched earlier in the regexp."

--
Affijn, Ruud

"Gewoon is een tijger."

 
Reply With Quote
 
jhu
Guest
Posts: n/a
 
      11-24-2007
On Nov 23, 8:11 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> Quoth jhu <jhu4...@yahoo.com>:
>
>
>
>
>
> > On Nov 23, 6:35 pm, Ben Morrow <b...@morrow.me.uk> wrote:
> > > Quoth jhu <jhu4...@yahoo.com>:

>
> > > > Can anyone tell me using Perl how to find all matching patterns. So if
> > > > I have this one big string of say a html web page which contains
> > > > multiple IP's and my pattern which is \d{1,3}\.\d{1,3}\.\d{1,3}\.
> > > > \d{1,3} then how do I go about setting up my code in some sort of
> > > > while loop to find all instances of matches ?

>
> > > Use the /g modifier. See 'Regexp Quote-Like Operators' in perldoc
> > > perlop, particularly the section starting "In scalar context, each
> > > execution of "m//g...".

>
> > > > Also can someone in
> > > > simple terms explain what a back reference is ? Is it simply the
> > > > pattern found ?

>
> > > perldoc perlretut

>
> > Ben thanks but I'm not on Unix or Linux but rather on Windows and
> > MV6.0.

>
> Huh? What difference does that make? Do you mean you can't find the
> perldocs? perldoc works perfectly well on Win32, or ActivePerl installs
> a nice HTMLified version in c:\perl\html.
>
> If you mean 'I'm not actually using Perl, but some other system that
> provides Perlish regexen' then: sorry, go ask somewhere else. This
> newsgroup is for discussing Perl.
>
> Ben- Hide quoted text -
>
> - Show quoted text -


Ok I did not understand that I can still view Perl docs online.
 
Reply With Quote
 
Dave Weaver
Guest
Posts: n/a
 
      11-26-2007
On Sat, 24 Nov 2007 11:12:54 -0800 (PST), jhu <> wrote:

> Ok I did not understand that I can still view Perl docs online.


You don't even have to be online.
Just bring up a command prompt window and use the "perldoc" command.
e.g.:

perldoc perl
perldoc perldoc

If you installed ActiveState's distribution, just go to your Start
Menu -> ActivePerl -> Documentation to get the HTML version.



 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Match a pattern multiple times, returning matches, captures andoffset? Markus Fischer Ruby 9 04-08-2011 07:53 PM
Searching Text for Multiple Matches jackster the jackle Ruby 3 12-02-2009 10:30 AM
Extraction of attribute values from pattern matches Peekachu Java 1 07-10-2006 07:59 PM
use matches in string w/o Pattern rocalp Java 0 02-18-2004 05:24 AM
searching for matches within a word list Rajarshi Guha Python 1 07-30-2003 10:10 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57