我想从http://search.twitter.com/search.atom?q=%23eu-jele%C4%A1%C4%A1i
使用PHP获取所有主题标签主题标签位于RSS Feed中的内容,标题节点中。它们以#
为前缀我遇到的问题是非英文字母(在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匹配项之前,是否需要对标题节点执行某些操作。
我的最终目标是用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>
非常感谢任何建议或解决方案。
答案 0 :(得分:9)
或者只是
(#\S+)
答案 1 :(得分:3)
如果您需要Twitter用于呈现主题标签的确切正则表达式,Twitter会在此open source library中提供它以及链接,提及等模式。
(^|[^0-9A-Z&/]+)(#|\uFF03)([0-9A-Z_]*[A-Z_]+[a-z0-9_\\u00c0-\\u00d6\\u00d8-\\u00f6\\u00f8-\\u00ff]*)
答案 2 :(得分:1)
抓住一个'#'加上所有字符,直到你碰到一个空白字符:
(#.+?)(?:\s)
或者更灵活一点(允许字符串结束):
(#.+?)(?:(\s|$))
答案 3 :(得分:1)
继承人我会用什么:)
(?<![^\s#])(#[^\s#]+)(?=(\s|$))
此字符串上的示例匹配
#test #test#test #test-test test#test
希望这有用
答案 4 :(得分:0)
为什么使用正则表达式?删除任何前面没有哈希的东西,然后通过哈希爆炸。 Regexp似乎不必要地复杂化并且不适合这个问题。
也许您可以进一步解释为什么需要在正则表达式中完成?