ok here is one solution... i don't have code but the explaination should suffice...
you want any pattern in your list, unless its already included in a hyperlink
(?!<a.?>).?pattern.*?(?!</a>)
you would need to wrap every pattern in this
only problem is you have to be careful about you order of applying replacements so the longest one goes first, but you should be able to sort your array of replacements
if there might already be hyperlinks, then you can use the same concept with two passes
pass 1)
every time you make a replcement surround it with some delim chars...
in the above case the delim chars are valid <a> tags
only match replcements not surrounded with your delim chars...
pass 2)
after all is said and done... remove all delim chars...
so maybe you should make the delim chars someting low on the asciitable
if this works.. do i really get a car?