in reply to Capture a string

use strict; use warnings; my $s1 = '<citref idrefs="cit">5c,5d,5Es</citref>'; my $s2 = '<qwerty alrefs="xad">5c,5d,5Es</qwerty>'; print parse($s1)."\n"; print parse($s2)."\n"; sub parse { my $orig = shift; my ($cit, $idrefs, $values, @values); $orig =~ m/.*?>(.*)<\//; $values = $1; @values = split ',', $values; $orig =~ m/.*?"(.*)">/; $cit = $1; $idrefs .= "$cit$_ " for @values; chop $idrefs; $orig =~ s/(.*?=").*(">.*)/$1$idrefs$2/; @values = map{ s/([a-z]+)/<it>$1<\/it>/i; $_;} @values; $values = join ',', @values; $orig =~ s/>.*?</'>'.$values.'<'/es; return $orig; }
And the output
<citref idrefs="cit5c cit5d cit5Es">5<it>c</it>,5<it>d</it>,5<it>Es</i +t></citref> <qwerty alrefs="xad5c xad5d xad5Es">5<it>c</it>,5<it>d</it>,5<it>Es</i +t></qwerty>