Kim bu twitter regexpi çatlak olabilir?

5 Cevap php

I http://search.twitter.com/search.atom?q=%23eu-jele%C4%A1%C4%A1i adlı PHP kullanarak tüm hashtags kapmak istiyorum

Hashtags RSS beslemesi içinde içerik, başlık düğümleri vardır. Bunlar # ile öneki

Ben yaşıyorum sorun (aralık bir-zA-Z dışında) İngilizce olmayan harfler ile.

Eğer RSS beslemesi bakmak ve ardından html kaynağını görmek ise benim mücadele daha net olabilir.

    <title>And more: #eu-jele&#289;&#289;i #eu-kiest #ue-wybiera #eu-eleger #ue-alege #eu-vyvolenej #eu-izvoli #eu-elegir #eu-v&#228;lja #eu-elect</title>

Benim rexexp eşleşmeleri bulmak önce başlık düğüm ile bazı şeyler yapmak gerekiyor.

Benim nihai amacı twitter arama url örneğin ile hashtag değiştirmektir http://search.twitter.com/search.atom?q=%23eu-jele%C4%A1%C4%A1i

İşte size boyunca yardımcı olacak bazı örnek kod.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<body>
<?php 
$title="And more: #eu-jele&#289;&#289;i #eu-kiest #ue-wybiera #eu-eleger #ue-alege #eu-vyvolenej #eu-izvoli #eu-elegir #eu-v&#228;lja #eu-elect";

// this is the regexp that hashtags.org use (http://twitter.pbwiki.com/Hashtags)
$r = preg_replace("/(?:(?:^#|[\s\(\[]#(?!\d\s))(\w+(?:[_\-\.\+\/]\w+)*)+)/"," <a href=\"http://search.twitter.com/search?q=%23\1\">\1</a> ", $title);
echo "<p>$r</p>";

$r = preg_replace("/(#.+?)(?:(\s|$))/"," <a href=\"http://search.twitter.com/search?q=\1\">\1</a> ", $title);
echo "<p>$r</p>";

// This is my desired end result
echo "<p><a href=\"http://search.twitter.com/search?q=%23eu-jeleġġi\">#eu-jeleġġi</a></p>";
?>

</body>
</html>

Herhangi bir tavsiye veya çözümü büyük mutluluk duyacağız.

5 Cevap

Ya da sadece

(#\S+)

Bir boşluk karakteri vurmak kadar bir '#' artı tüm karakterleri tut:

(#.+?)(?:\s)

Ya da biraz daha esnek (dize sonu sağlar):

(#.+?)(?:(\s|$))

Eğer Twitter hashtags işlemek için kullandığı kesin düzenli ifade gerekiyorsa, Twitter vb bahseder, bağlantı için desenleri ile birlikte, bunu sağlayan, bu open source library içinde.

Hashtag Match Pattern

(^|[^0-9A-Z&/]+)(#|\uFF03)([0-9A-Z_]*[A-Z_]+[a-z0-9_\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff]*)

Yukarıdaki desen this java dosyasından biraradaydı edilebilir. Bu model için doğrulama testleri this file hattında 115 civarında bulunmaktadır.

heres i kullanmak istiyorum :)

(?<![^\s#])(#[^\s#]+)(?=(\s|$))

Örnek, bu dize eşleşen

#test # test # test #test-test # testi testi

Bu yararlı olduğunu umuyoruz

Neden regexpi kullanıyorsunuz? Bir karma öncesinde değil bir şey kaldırmak, daha sonra karma tarafından patlayabilir. Regexp gereksiz yere karmaşık ve soruna kötü uygun görünmektedir.

Bu regexp yapılması gereken Belki neden daha açıklayabilir misin?