考虑以下字符串:
$MRK - Merck - ($AAPL, $MSFT, $F) having day $AA! like $P and me :)
虽然这是乱七八糟的,但它显示了我的问题。我想扫描以美元符号($)开头的所有单词,并根据预定义的代码列表进行检查。如果匹配,请用标签({TICKER})替换它们,如下所示:
{TICKER} - Merck - ({TICKER}, {TICKER},{TICKER}) having a day {TICKER}! like
{TICKER} an me :)
我现在使用这个功能:
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);
}
问题:这只捕获被空格包围的代码(这个$ AA被空格包围)但不是其他情况,例如(这个代码在$ AA前面只有一个空格)或(这个被逗号包围:我,$ AA,自动收报机)。而且两个代码紧接着(满$ AA $ XOM) - 应该成为(对{TICKER} {TICKER}感到高兴)。我如何解决所有这些可能的情况?
答案 0 :(得分:1)
更改此代码的缺点是什么
$tickers[] = ' $' . $row->symbol . ' ';
到此?
$tickers[] = '$' . $row->symbol;
无论在自动收报机之前或之后发生什么,这样做都会进行此更改。
答案 1 :(得分:1)
使用正则表达式:
preg_replace('/\$[A-Z]+/', '{TICKER}', $tweet);
答案 2 :(得分:1)
您可能正在寻找如果"代码"将永远只是一串大写字母,这应该足够了:\b
字边界
<?php
$str = '$MRK - Merck - ($AAPL, $MSFT, $F) having day $AA! like $P and me :)';
echo preg_replace('#\$[A-Z]+#', '{TICKER}', $str), "\n";
输出:
{TICKER} - Merck - ({TICKER}, {TICKER}, {TICKER}) having day {TICKER}! like {TICKER} and me :)