This is both a Regex syntax and a boost question (in, so here goes...

I've got the following code to strip out all <a>, <frame>, and <iframe> tags from a webpage and parse them for their href or src attributes (yes, I realize that it can potentially grab an <a src=""> or an <iframe href="">, but that's ok for this project).

Surprise surprise, it doesn't work quite as I'd hoped, and I was wondering if you could help me ascertain the problem:

(pageSource is a pointer to a string containing the source of the page;  the project specifications allow for the attribute to be formatted with either a single or double quote or neither around the actual URL.  It correctly finds each tag and attribute, but it's grabbing the URL and also the "> that follow it.)  How can I get rid of the closing ">  ?

void Page::parseLinks() {

boost::regex linkTagRegex("(?i)<(a|i?frame)[^>]*>");

boost::regex linkRegex("(?i)(href|src)\\s*?=[\\w]*?([\\W]*?)[\\w]+?");

boost::sregex_token_iterator p(pageSource->begin(), pageSource->end(), linkTagRegex, 0);

boost::sregex_token_iterator end;

for (; p != end; p++) {

string tag(p->first, p->second);

boost::cmatch matches;

if (boost::regex_search(tag.c_str(), matches, linkRegex)) {

string * newLink = new string(matches[2].first);

URL * foundLink = new URL(newLink);

delete newLink;

foundLink->resolveWithRespectTo(pageURL);

foundLinks->add(foundLink);

}

}

}


Thanks!

Dave