As others have said, you should avoid regexes in many cases where there exists a better parser (whether HTML, CSS, CSV, or whatever) that works for your use-case.
The reason for this is that the data may be tree structured, and might have some of the things you're looking for within other elements; for example, within <!-- -->
comments. And then you have to exclude those. Which means recognizing when a comment really is a comment, and it rapidly becomes a mess.
But there are use-cases where such a parser is overkill. If you want a quick guesstimate, from a commandline command rather than a script you'll be using forever and sharing with others, regexes can still be your friend.
Something like this:
<div class="about">([\s\S]*?<\/div>)*
This will capture not only the divs within the "about" div, but every closing div tag in the remainder of the page, whether it's commented out or not (along with any separating tags and whitespace and other stuff). If yours is a simple enough case that this is all you want, then that's fine.
But if you want anything complex, then you'll rapidly venture into recursive regexes, with conditionals, and then the pain starts; the DOM tree parser will become the better option, long before you reach that point.