in reply to Perl file name parsing - Regular expression
Are there any strings in your logfile array containing CSS which shouldn't be altered? If not, you could just go with
for (@filenames) { s/CSS//; } # or written with a statement modifier: # s/CSS// for @filenames;
You could run the above code over your array and check for false positives, and extend the regular expression if so.
Since your strings are tokens concatenated with a dot, of which the last is always ErrorLog, you could anchor your regular expression at the end with $ and remove CSS from the token preceeding the last two:
for (@filenames) { s{ # substitute CSS # the string CSS ( # and a capture consisting in \. # a literal dot, [^\.]+ # any number of non-dots, \. # another literal dot, ErrorLog # and the constant ErrorLog ) # (end of capture) $ # anchored at the end of the string } {$1}x; # against the capture above }
Or written more concisely with a terse explanation:
for (@filenames) { s/CSS(\.[^\.]+\.ErrorLog)$/$1/; # remove CSS from end of antepenul +timate token }
Perhaps more effective and faster, if you have only a few strings with CSS: look for CSS, if found, split, remove and join:
for (@filenames) { if (/CSS/) { my @t = split /\./; $t[-3] =~ s/CSS$//; $_ = join '.', @t; } }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Perl file name parsing - Regular expression
by rinkish85 (Novice) on May 30, 2017 at 06:32 UTC |