in reply to Count multiple pattern matches
(sorry, just not feeling up to coding at the moment)
How about this idea: put the keywords into a hash, with a zero as the hash value for each keyword. Then for each token in the input string, increment the hash value for that token (check to see whether it's in the hash first?). The non-zero hash values are then counts of how many times each keyword appears in the input string. That leaves the hunting for the tokens to the hash implementation... but you still have to look for the non-zero hash elements. Something like foreach keyword in the hash, if the value is greater than zero, spit out the keyword and the value (then set it to zero again, if this is all inside a loop)... ? The hunting-through-an-array thing is one of my old C habits that I'm trying to break.
Please don't scream, just gently correct me if I'm being stupid.