Regular expressions work on regular languages, but HTML is not a regular language. So, while you can do some limited extraction of html using a regexp, regexps are not the right tool for the job.
Instead, I'd suggest using the Dom.Document class and the Dom.XmlNode class
A brief example to get you going
Dom.Document inDoc = new Dom.Document();
Dom.XmlNode root = inDoc.getRootElement();
Dom.XmlNode aTag = root.getChildElement('a', null);
Dom.XmlNode spanTag = aTag.getChildElement('span', null);
System.debug('extracted hyperlink: ' + aTag.getAttributeValue('href', null));
System.debug('extracted link text: ' + spanTag.getText());
I'm not exactly sure how you'd go about getting the string representation of the link tag (from the Dom.XmlNode) once you extracted it from the root, and I don't have the ability to play around with it today. I'll try to keep this in mind and see if I can work something out tomorrow if you truly need the entire content (attributes and children) of the link tag instead of the href and span text.