更新正则表达式仅匹配单个单词中的大写字符

时间:2012-02-15 09:48:51

标签: php regex

请考虑以下事项:

$tweet = "RT @forunemagazine Comment here RT @foo Blah";

function _process_retweets($tweet) {
  preg_match('/RT +@[^ :]+:?(.*)/ui', $tweet, $retweets);
  if (count($retweets) > 0) {
    $tag = ' {RT} '; // In reality, output could also be {RT|id}, etc. 
                     // but this is not relevant here
    return preg_replace("/RT/ui", $tag, $tweet);
  }
  else {
    return $tweet;
  }
}

echo _process_retweets($tweet);

此处的预期输出是:

{RT} @fortunemagazine Comment here {RT} @foo Blah

但是,因为@fortunemagazine中有一个“rt”,输出为:

{RT} @fo {RT} unemagazine Comment here {RT} @foo Blah

我认为正则表达式是因为这样的错误而被覆盖的。它只能匹配RT,它可能位于字符串的开头:“RT @UserName”或中间位置:“... RT @UserName ...”但总是在CAPITALS中,从不是有效的“RT” “后跟除空格之外的任何其他字符,然后是”@username“,其中”username“可以是a-zA-Z _

我在正则表达式中做什么?

3 个答案:

答案 0 :(得分:1)

通过在正则表达式修饰符中添加i,使其不区分大小写,将其删除以仅匹配大写RT。

答案 1 :(得分:1)

preg_replace("/RT(?=\s)/", $tag, $tweet);

http://ideone.com/P7dxm

答案 2 :(得分:1)

return preg_replace("/\bRT\b/", $tag, $tweet);