http://www.perlmonks.org?node_id=1017347


in reply to Using special characters in left part of a regex match?

G'day shamat,

Firstly, my comments (some of which have already been mentioned in earlier responses):

Here's a solution that takes all of the above into account:

#!/usr/bin/env perl use strict; use warnings; my @exemplars = <DATA>; my $reference = shift @exemplars; print "Reference string: $reference"; for (@exemplars) { my $exemplar = $_; s/[.]{3}/.+?/g; if ($reference !~ /$_/) { print "NO MATCH: $exemplar"; } } __DATA__ Gallia est omnis divisa in partes tres Gallia est omnis divisa in ... Gallia est omnis ... Gallia ... omnis divisa in ... Gallia est ... tres Gallia ... partes tres Gallia est ... partes tres Gallia ... divisa ... tres ... tres quattuor Gallia ...

Output:

$ pm_latin_fragments.pl Reference string: Gallia est omnis divisa in partes tres NO MATCH: Gallia NO MATCH: quattuor

-- Ken

Replies are listed 'Best First'.
Re^2: Using special characters in left part of a regex match?
by shamat (Acolyte) on Feb 06, 2013 at 21:31 UTC
    Thank you so much Ken! This is amazing. As for your first comment, I might want to compare all the fragments with each other, which is a very hard job. As a work around, I added a (clumsy) piece of code to yours, so that the script picks up the most complete string as the reference one -- meaning the string which contains most words. Here is the code:
    #!/usr/bin/env perl @exemplars = <DATA>; foreach $line (@exemplars) { @words = split (/\s+/, $line); $array[$#words] = $line; } @array = sort { $a <=> $b } @array; $reference = $array[-1]; print "Reference string: $reference"; for (@exemplars) { $exemplar = $_; s/[.]{3}/.+?/g; if ($reference !~ /$_/) { print "NO MATCH: $exemplar"; } } __DATA__ Gallia est omnis divisa in partes tres Gallia est omnis divisa in ... Gallia est omnis ... Gallia ... omnis divisa in ... ... in ... ... est ... Gallia est ... tres Gallia ... partes tres Gallia est ... partes tres Gallia ... divisa ... tres ... tres quattuor Gallia ...
    Output is the same as yours. I will run some tests, and see what happens.