Кто может взломать это регулярное выражение twitter?

Я хотел бы захватить все хэштеги с помощью PHP из http://search.twitter.com/search.atom?q=%23eu-jele%C4%A1%C4%A1i

Хэштеги находятся в заголовках содержимого, заголовков в RSS-канале. Они имеют префикс #

Проблема, с которой я столкнулась, – это неанглийские буквы (вне диапазона a-zA-Z).

Если вы посмотрите на RSS-канал и затем просмотрите источник html, моя борьба может быть более ясной.

<title>And more: #eu-jeleġġi #eu-kiest #ue-wybiera #eu-eleger #ue-alege #eu-vyvolenej #eu-izvoli #eu-elegir #eu-välja #eu-elect</title> 

Мне нужно что-то сделать с узлом заголовка, прежде чем найти совпадения rexexp.

Моя конечная цель – заменить хэштегов поисковым URL twitter, например http://search.twitter.com/search.atom?q=%23eu-jele%C4%A1%C4%A1i

Вот пример кода, который поможет вам.

 <!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ġġi #eu-kiest #ue-wybiera #eu-eleger #ue-alege #eu-vyvolenej #eu-izvoli #eu-elegir #eu-vä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> 

Любые советы или решения были бы весьма признательны.

Или просто

 (#\S+) 

Если вам нужно точное регулярное выражение, которое использует Twitter для рендеринга хэштегов, Twitter предоставляет его вместе с шаблонами ссылок, упоминаний и т. Д. В этой библиотеке с открытым исходным кодом .

Шаблон матча Hashtag

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

Вышеупомянутый шаблон может быть собран из этого java-файла. Тесты проверки этого шаблона находятся в этом файле по строке 115.

Захватите «#» плюс все символы, пока не нажмете пробельный символ:

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

Или немного более гибким (допускает конец строки):

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

heres, что бы я использовал 🙂

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

пример соответствия в этой строке

#test # test # test # test-test test # test

надеюсь, это полезно

Почему вы используете регулярное выражение? Удалите все, что не предшествует хешу, затем взорвется хешем. Regexp кажется излишне сложным и плохо подходит для проблемы.

Возможно, вы еще можете объяснить, почему это нужно делать в регулярном выражении?