I need to match all of these opening tags:
<p>
<a href="foo">
But not self-closing tags:
<br />
<hr class="foo" />
I came up with this and wanted to make
no, this is one of the worst answers on Stack Overflow
OP had a specific question to capture opening tags. The thing OP asked about can be done with regular expressions. It is true that arbitrarily nested languages like HTML cannot generally be parsed with regular expressions, but that is not what OP asked about.
This is StackOverflow after all. Your question is wrong. Your problem is wrong. You are wrong. I am right. Thread locked. Go read this other post that is totally unrelated to your problem I’ve decided isn’t the problem you’re facing because. I. Am. Right.
It can be done with simple regex of the kind proposed in various answers there iff the html is known to be limited to the subset of html where that sort of thing can easily be made to work. The question does not tell us whether or not that is the case, so everyone is free to make their own assumptions and argue as if they know what's going on.
Except in 99% of cases the person is asking an xy problem, and if they ever explained the why, they would get a proper answer.
Often the reason no one does the hyper-specific thing, is that there are better non code solutions, it's massively insecure, or is just stupid micromanaging.
You know, when I typically ask a question on SO, its because I want to learn how that thing works, or how to write it myself. I usually say as much, but the SO folks are too focused on the ends, they completely neglect the means. Chances are I'm already aware of that no-code solution, but that's not what I'm asking for.
I would say it's more like: "How can I do X?" "Here are some reasons you can't do Y."
The answers should have been "Here are some reasons doing X is hard, but here's an attempt at it anyway and also some more robust alternatives to doing X." That would have been an excellent answer. (If you go down far enough you do start to see things like this but they're hindered by people still responding that you can't do Y or downvoting because they don't understand what's happening.)
They are trying to derail your question, which was already a generalized version of what your actual question was. And of course, you would need to explain everything you generalized out of your question (which would probably all get deleted by someone editing your question and removing all the irrelevant facts) by which point your question becomes so complicated nobody can answer it, even though they could have answered the generalized version.
My advice, just use chatgpt or mistral, 99% you will get a better answer than stackoverflow.
And you will get this actionnable answer IMMEDIATELY !
It's still actually pretty sketchy, depending on exactly what you want to do. Strict regex still won't be able to match correctly if you want to match what an HTML parser considers the opening tag, though fancier regex will. If you're just looking for the tags in the HTML document as a flat document it's doable, though. (Mostly.)
I once applied to an internship for a company doing job offers aggregation. During the interview they explained to me that the core of what they did was parsing (partial) html with regex. When I asked why they wouldn't develop a custom parser, they replied to me that they were working on it, but that the internship wouldn't focus on that. I was not disappointed when it didn't get the job.
There is a famous Erik Naggum rant about XML at, no wait, I better not link it but you can find it with a search engine if you want, which means you don't get to complain to me about it since you are the one who went looking for it. Very NSFW and VERY politically incorrect. Naggum died in 2009 but anyone who published a thing like that today would be raked over the coals.
Using a regex on html is like eating wild mushrooms that you found in the woods. There are times where it's appropriate and safe, other times where it's completely insane and possibly deadly, and it takes considerable experience to know how to tell the difference.