I would urge you not to use regular expressions to manipulate XML - ever. Regular expressions cannot handle a contextual language like XML, and as a result you build brittle code - that a perfectly valid alteration to XML format (such as whitespacing) might break.
So instead:
#!/usr/bin/env perl
use strict;
use warnings;
use XML::Twig;
my $twig = XML::Twig->parse( \*DATA );
foreach my $element ( $twig->get_xpath('//tag2') ) {
if ( scalar $element->children('tag3') == 1 ) {
$element->print;
print "\n";
}
}
__DATA__
<root>
<tag1><tag2><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3></tag2></tag1>
<tag1><tag2><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3><tag3>Some randome chars</tag3></tag2></tag1>
</root>
This will handle XML formatted as you have, but also just on a single line. Or like this:
<root>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
<tag1>
<tag2>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
<tag3>Some randome chars</tag3>
</tag2>
</tag1>
</root>
Or like this:
<root
><tag1
><tag2
><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3></tag2></tag1><tag1
><tag2
><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3><tag3
>Some randome chars</tag3></tag2></tag1></root>
Which are semantically identical to yours.