2009-09-22 18 views
1

我试图找到正确的正则表达式匹配在Twitter上的所有RT场景(等不及Twitter的新转推API)。 我看到它的方式,RT可以位于从Twitter返回的字符串的开头,中间或结尾。 所以,我需要在一开始这个正则表达式的东西,并结束:试图找到Twitter的RT与正则表达式和PHP

([RR])([Tt的])

无论我怎么努力,我不能匹配所有场景一个正则表达式。
我试图

[^ | \ S +]

相匹配的情形,其中RT将显示在在字符串的开头或在一个或多个空格字符,但它没有在字符串或RT的结尾处工作相同。
我试图

[\ S + | $]

当RT出现无论是在字符串的末尾或者作为与有一个或多个空格字符跟随它,相同匹配的情况下'pre' - 它不起作用。

有人能请解释一下我究竟做错了什么?任何帮助或建议将不胜感激(一如既往:))

+0

不要人们通常在一个特定的人转推?你可以通过检查“RT @ ...”来缩小这个范围,而不仅仅是“RT”。 – Tim 2009-09-22 19:04:27

+0

你知道转推API像本周一样推出,对吗? – ceejayoz 2009-09-22 19:12:01

+0

ceejayoz是的,我知道它的推出不久,但我的项目只有找到我想要转移到其他的东西,我需要在锐推做retwwets所以当API准备好,我来介绍这个小改动代码 – 2009-09-22 21:23:38

回答

7

你可能是最幸福的东西,如:

/\brt\b/i 

这将找到的RT孤立的情况下(即由可字包围边界),并在正则表达式的末尾使用/i修饰符,以使其不区分大小写。

你想要的字边界,这样你就不会结束,并误以为含有像“艺术”和“石英”字样随机鸣叫实际上是锐推。即使那样,它也会有误报。

默认情况下,正则表达式可以(并且将)匹配字符串中的任何位置,所以如果确实不关心它是什么或者它是否它存在。

3
if(preg_match('/\brt\s*@(\w+)/i', $tweet, $match)) 
    echo 'Somebody retweeted ' . $match[1] . "\n"; 
+0

长相启动像亚当的答案是我寻找的优雅解决方案。 感谢 – 2009-09-22 19:05:12

+0

是,亚当的是你后的解决方案,但它不会伤害到占@符号为好。您可能会与发布“turn rt”指示的人重叠。注意@和/或锚定在字符串的开始处将有助于缓解这种情况。 – 2009-09-22 19:25:25