Consider the following string:
$MRK - Merck - ($AAPL, $MSFT, $F) having day $AA! like $P and me :)
Although it’s jibberish, it shows my problem. I want to scan for all words starting with a dollar-sign ($) and check them against a pre-defined list of tickers. If there’s a match, replace them with a label ({TICKER}), as follows:
{TICKER} - Merck - ({TICKER}, {TICKER},{TICKER}) having a day {TICKER}! like
{TICKER} an me :)
I now use this function:
function _process_tickers($string) {
$result = db_query("SELECT symbol FROM us_stocks");
while ($row = db_fetch_object($result)) {
$tickers[] = ' $' . $row->symbol . ' ';
}
return str_replace($tickers, ' {TICKER} ', $tweet);
}
Problem: this only catches tickers that are surrounded by spaces (this $AA is surrounded by spaces) but not other situations like (this ticker has only a space in in front $AA) or (this one is surrounded by commas: my,$AA, ticker). But also two tickers right after each other (happy with $AA$XOM) – should become (happy with {TICKER}{TICKER}). How do I cath all these possible situations?
Use regular expressions: