Pergunta

Eu estou tentando encontrar o Regular Expression correta para coincidir com todos os cenários RT no Twitter (não posso esperar para nova API de retweet do Twitter). A forma como eu vejo, RT do pode estar no início, meio ou fim da cadeia retornou de Twitter. Então, eu preciso de alguma coisa no início e no final desta expressão regular:

([Rr]) ([Tt])

Não importa o que eu tente, não pode coincidir com todos os cenários em uma expressão regular.
Tentei

[^ | \ s +]

para coincidir com o cenário em que a RT vai aparecer tanto no início da cadeia ou após um ou mais espaços em branco caracteres, mas não funcionam da mesma forma para o fim da cadeia ou RT.
Tentei

[\ s + | $]

para corresponder a um caso quando o RT aparecer tanto no fim da cadeia ou há um ou mais espaços em branco caracteres após isso, tal como com o 'pré' -. Não funcionou

Por favor alguém pode explicar o que estou fazendo de errado aqui? Qualquer ajuda ou sugestões serão muito apreciados (como sempre :))

Foi útil?

Solução

Você provavelmente vai ser mais feliz com algo como:

/\brt\b/i

O que vai encontrar casos isolados de RT (isto é, rodeado por palavra-fronteiras), e usar o modificador /i no final da regex para torná-lo case-insensitive.

Você quer os limites de palavra, para que você não acabar pensando os tweets aleatórios que contêm palavras como "arte" e "Quartzo" são realmente retweets. Mesmo assim, ele vai ter falsos positivos.

Por padrão, uma expressão regular pode (e vai) corresponder em qualquer lugar dentro de uma string, assim você não precisa de conta para o que pode preceder ou seguir o seu jogo se de fato você não se importa o que é ou se é presente.

Outras dicas

if(preg_match('/\brt\s*@(\w+)/i', $tweet, $match))
    echo 'Somebody retweeted ' . $match[1] . "\n";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top