请考虑以下事项:
$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 _
我在正则表达式中做什么?
答案 0 :(得分:1)
通过在正则表达式修饰符中添加i,使其不区分大小写,将其删除以仅匹配大写RT。
答案 1 :(得分:1)
preg_replace("/RT(?=\s)/", $tag, $tweet);
答案 2 :(得分:1)
return preg_replace("/\bRT\b/", $tag, $tweet);