in reply to An efficient way to gather a common portion of several strings' beginnings
personally I much prefer hippos approach with lexical sorting!
FWIW here a solution with a regex searching through a concatenation of all strings for the longest repeated pattern:
use strict; use warnings; my @strings = ( 'string that I need to gather the common base from: number 1 and s +ome other junk in it', 'string that I need to gather the common base from: number 2 and s +ome other junk in it', 'string that I need to gather the common base from: number 3 and s +ome other junk in it', ); my $sep = "\0"; my $nosep = "[^$sep]"; my $all = join $sep, @strings; $all =~ /^ ($nosep*) $nosep*? ( $sep \1 $nosep*? )+ $/x; print "solution: '$1'";
OUTPUT:
solution: 'string that I need to gather the common base from: number '
Please note that you need to take care that the separator (here \0 ) is not part of any string.
You could easily check by counting $sep in $all.
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
Je suis Charlie!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: An efficient way to gather a common portion of several strings' beginnings
by oiskuu (Hermit) on Nov 15, 2015 at 21:52 UTC | |
by LanX (Saint) on Nov 15, 2015 at 22:02 UTC | |
by LanX (Saint) on Nov 17, 2015 at 20:57 UTC | |
by LanX (Saint) on Nov 17, 2015 at 00:36 UTC | |
by LanX (Saint) on Nov 17, 2015 at 22:48 UTC |