【问题标题】:Trying to find Twitter RT's with Regular Expressions and PHP尝试使用正则表达式和 PHP 查找 Twitter RT
【发布时间】:2023-03-24 11:32:01
【问题描述】:

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

([Rr])([Tt])

无论我尝试什么,我都无法在一个正则表达式中匹配所有场景。
我试过了

[^|\s+]

以匹配 RT 将出现在字符串开头或一个或多个空格字符之后的场景,但对于字符串或 RT 的结尾却不一样。
我试过了

[\s+|$]

匹配 RT 出现在字符串末尾或后面有一个或多个空格字符的情况,与 'pre' 相同 -- 它不起作用。

有人可以解释一下我在这里做错了什么吗?任何帮助或建议将不胜感激(一如既往:))

【问题讨论】:

  • 人们通常不会转发特定的人吗?您可能可以通过检查“RT @...”来进一步缩小范围,而不仅仅是“RT”。
  • 你知道转推 API 就像这周一样推出,对吧?
  • ceejayoz 是的,我知道它很快就会启动,但我的项目只是从寻找转推开始,我想继续做其他我需要在转推上做的事情,所以当 API 准备好时,我会介绍这个对代码的小改动

标签: php regex twitter preg-match


【解决方案1】:

您可能会对以下内容最满意:

/\brt\b/i

这将找到RT 的孤立实例(即被单词边界包围),并在正则表达式末尾使用/i 修饰符使其不区分大小写。

您需要单词边界,以免最终认为包含“Art”和“Quartz”等单词的随机推文实际上是转推。即使那样,它也会有误报。

默认情况下,正则表达式可以(并且将)匹配字符串中的任何位置,因此如果您确实不在乎它是什么或它是否是,则无需考虑匹配之前或之后的内容现在。

【讨论】:

    【解决方案2】:
    if(preg_match('/\brt\s*@(\w+)/i', $tweet, $match))
        echo 'Somebody retweeted ' . $match[1] . "\n";
    

    【讨论】:

    • 看起来亚当的答案是我正在寻找的优雅解决方案。谢谢
    • 是的,Adam's 是您所追求的解决方案,但考虑 @ 符号也没有什么坏处。您可能会通过发布“turn rt”与指示方向的人重叠。注意 @ 和/或在字符串开头的锚点将有助于缓解这种情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多