2

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&#289;&#289;i #eu-kiest #ue-wybiera #eu-eleger #ue-alege #eu-vyvolenej #eu-izvoli #eu-elegir #eu-v&#228;lja #eu-elect</title>

rexexpが一致するのを見つける前に、タイトルノードで何かをする必要がありますか?

私の最終的な目的は、ハッシュタグをTwitterの検索URLに置き換えることです。例: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&#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>

任意のアドバイスや解決策をいただければ幸いです。

4

5 に答える 5

9

あるいは単に

(#\S+)
于 2009-03-27T01:07:17.950 に答える
3

Twitter がハッシュタグをレンダリングするために使用する正確な正規表現が必要な場合、Twitter はこのオープン ソース ライブラリで、リンク、メンションなどのパターンと共にそれを提供します。

ハッシュタグの一致パターン

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

上記のパターンは、このJava ファイルからつなぎ合わせることができます。このパターンの検証テストは、このファイルの 115 行付近にあります。

于 2011-04-24T05:11:12.697 に答える
1

空白文字をヒットするまで、「#」とすべての文字を取得します。

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

またはもう少し柔軟です(文字列の終わりを許可します):

(#.+?)(?:(\s|$))
于 2009-03-27T01:04:14.807 に答える
1

heres私が使用するもの:)

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

この文字列でのマッチングの例

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

これが役立つことを願っています

于 2009-05-08T20:07:46.367 に答える
0

なぜ正規表現を使用しているのですか?ハッシュが前に付いていないものをすべて削除してから、ハッシュで分解します。正規表現は不必要に複雑で、問題に適していないようです。

おそらく、これを正規表現で行う必要がある理由をさらに説明できますか?

于 2009-03-27T03:19:22.530 に答える