Regex remplacera conditionnellement les hashtags Twitter par des hyperliens

Je suis en train d'écrire un petit script PHP pour prendre la dernière demi-douzaine de Twitter mises à jour de statut d'un utilisateur de se nourrir et de les mettre en forme pour l'affichage sur une page web. Dans le cadre de ce que j'ai besoin d'un regex pour remplacer à réécrire les hashtags que les liens hypertexte de search.twitter.com. J'ai d'abord essayé d'utiliser:

<?php
$strTweet = preg_replace('/(^|\s)#(\w+)/', '#<a href="http://search.twitter.com/search?q=%23"></a>', $strTweet);
?>

(prises de https://gist.github.com/445729)

Dans le cadre de tests, j'ai découvert que #test est converti en un lien sur le site Twitter, cependant, n ° 123 ne l'est pas. Après un peu de contrôle sur l'internet et de jouer avec les différentes balises je suis venu à la conclusion qu'un hashtag doit contenir des caractères alphabétiques ou un trait de soulignement à quelque part pour constituer un lien; tags avec uniquement des caractères numériques sont ignorés (sans doute d'arrêter de des choses comme "Bonne présentation Bob, diapositive no 3 est mon préféré!" liée). Cela rend le code ci-dessus dans l'erreur, car il se fera un plaisir de convertir #123 dans un lien.

Je n'ai pas fait beaucoup de regex dans une alors que, dans mon rustyness je suis venu avec le script PHP ci-solution:

<?php
$test = 'This is a test tweet to see if #123 and #4 are not encoded but #test, #l33t and #8oo8s are.';

//Get all hashtags out into an array
if (preg_match_all('/(^|\s)(#\w+)/', $test, $arrHashtags) > 0) {
  foreach ($arrHashtags[2] as $strHashtag) {
    //Check each tag to see if there are letters or an underscore in there somewhere
    if (preg_match('/#\d*[a-z_]+/i', $strHashtag)) {
      $test = str_replace($strHashtag, '<a href="http://search.twitter.com/search?q=%23'.substr($strHashtag, 1).'">'.$strHashtag.'</a>', $test);
    }
  }
}

echo $test;
?>

Il fonctionne, mais il semble assez longue haleine pour ce qu'il fait. Ma question est, est-il un seul preg_replace similaire à celui que j'ai eu de la gist.github qui conditionnellement réécrire les hashtags dans les liens hypertexte que si elles NE contiennent PAS seulement des chiffres?

source d'informationauteur foxsoup