Şartlı köprüler ile Twitter hashtags değiştirmek için Regex

0 Cevap php

Ben bir kullanıcı beslemesinden son yarım düzine Twitter durum güncellemelerini kapmak ve bir web sayfasında görüntülemek için onları biçimlendirmek için küçük bir PHP komut dosyası yazıyorum. Bunun bir parçası olarak ben bir regex search.twitter.com köprüler gibi hashtags yeniden yazmak yerine gerekiyor. Başlangıçta ben kullanmaya çalıştım:

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

(Alınan https://gist.github.com/445729)

Test derste ben # test ancak 123. değil, Twitter sitesinde bir bağlantı dönüştürülür keşfetti. Internet üzerinde kontrol ve çeşitli etiketleri ile uğraşırken biraz sonra ben bir hashtag bir bağlantı teşkil yerde içinde alfabetik karakterler veya bir alt çizgi içermelidir sonuç geldi; sadece sayısal karakterler ile etiketleri (bağlantılı olmaktan muhtemelen gibi şeyleri durdurmak için "İyi bir sunum Bob, slayt 3. benim favori oldu!") göz ardı edilir. Mutlulukla bir bağlantı içine 123. dönüştürmek gibi bu, yukarıdaki kodu yanlış yapar.

Ben bir süre daha regex yapmadım, bu yüzden benim rustyness ben şu PHP çözüm geldi:

<?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;
?>

Bu işler; ama oldukça ne demek için uzun soluklu görünüyor. Sorum sadece sayı içeren YAPMAYIN SADECE şartlı köprüler içine hashtags yeniden yazacak ben gist.github aldığım benzer bir tek preg_replace var, nedir?

0 Cevap