Пытаясь найти Twitter RT с регулярными выражениями и PHP - PullRequest
1 голос
/ 22 сентября 2009

Я пытаюсь найти правильное Регулярное выражение, соответствующее всем сценариям RT в Твиттере (не могу дождаться нового API ретвитов Twitter). На мой взгляд, RT могут быть в начале, середине или конце строки, возвращаемой из Twitter. Итак, мне нужно что-то в начале и конце этого регулярного выражения:

([Rr]) ([Т])

Независимо от того, что я пытаюсь, я не могу сопоставить все сценарии в одном Регулярном выражении.
Я пытался

[^ | \ s +]

для соответствия сценарию, в котором RT будет отображаться либо в начале строки, либо после одного или нескольких пробельных символов, но он не работал одинаково для конца строки или RT.
Я пытался

[\ S + | $]

, чтобы соответствовать случаю, когда RT появляется либо в конце строки, либо после него один или несколько пробельных символов, так же, как и с 'pre' - он не работал.

Может кто-нибудь объяснить, что я здесь не так делаю? Любая помощь или предложения будут высоко оценены (как всегда :))

Ответы [ 2 ]

7 голосов
/ 22 сентября 2009

Вы, вероятно, будете счастливы с чем-то вроде:

/\brt\b/i

, который найдет единичные экземпляры RT (то есть окруженные границами слов) и использует модификатор /i в конце регулярного выражения, чтобы сделать его нечувствительным к регистру.

Вам нужны границы слов, чтобы вы не думали, что случайные твиты, содержащие такие слова, как «Искусство» и «Кварц», на самом деле являются ретвитами. Даже тогда у него будут ложные срабатывания.

По умолчанию регулярное выражение может (и будет) совпадать в любом месте строки, поэтому вам не нужно учитывать, что может предшествовать или следовать вашему совпадению, если вам действительно все равно, что это такое или оно есть. присутствует.

3 голосов
/ 22 сентября 2009
if(preg_match('/\brt\s*@(\w+)/i', $tweet, $match))
    echo 'Somebody retweeted ' . $match[1] . "\n";
...