use strict;
my $str = '<div id="feature-bullets" class="a-section a-spacing-medium a-spacing-top-small">
<ul class="a-unordered-list a-vertical a-spacing-none">
<div id="hsx-rpp-bullet-fits-message" class="aok-hidden">
<div class="a-box a-alert-inline a-alert-inline-success hsx-rpp-fitment-bullets"><div class="a-box-inner a-alert-container"><i class="a-icon a-icon-alert"></i><div class="a-alert-content">
This fits your <span class="hsx-rpp-bullet-model-info"></span>.
</div></div></div>
</div>
<li id="replacementPartsFitmentBullet" data-doesntfitmessage="We\'re not sure this item fits your " data-fitsmessage="This fits your " class="aok-hidden"><span class="a-list-item">
<span id="replacementPartsFitmentBulletInner"> <a class="a-link-normal hsx-rpp-fitment-focus" href="#">Make sure this fits</a>
<span>by entering your model number.</span>
</span>
</span></li>
<script type="text/javascript">
P.when("ReplacementPartsBulletLoader").execute(function(module){ module.initializeDPX(); })
</script>
<li><span class="a-list-item">
Precision ground up-cut spiral design
</span></li>
<li><span class="a-list-item">
M2 high speed steel runs cooler, lasts longer
</span></li>
<li><span class="a-list-item">
Includes sizes 1/4" x 3", 1/2" x 3-1/4" and 3/8" x 3"
</span></li>
<li><span class="a-list-item">
1/4" shank;
</span></li>
</ul>
<!-- Loading EDP related metadata -->
<span class="edp-feature-declaration" data-edp-feature-name="featurebullets" data-edp-asin="B006ZBADNW" data-data-hash="2400652208" data-defects="[{"id":"defect-mismatch-info","value":"Different from product"},{"id":"defect-missing-information","value":"Missing information"},{"id":"defect-unessential-info","value":"Unimportant information"},{"id":"defect-other-productinfo-issue","value":"Other"}]" data-metadata="CATALOG" data-feature-container-id="" data-custom-event-handler="" data-display-name="Bullet Points" data-edit-data-state="featureBulletsEDPEditData" data-position="" data-resolver="CQResolver"></span>
<span class="caretnext">›</span>
<a id="seeMoreDetailsLink" class="a-link-normal" href="#productDetails">See more product details</a>
</div>';
my $regex = qr/\s*<div\sid=\"feature-bullets[\s\S]*?(<li>\s*[\s\S]*?[\s]+<\/ul>)/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Perl, please visit: http://perldoc.perl.org/perlre.html