Regex 不是在perl中自动链接所有数字twitter哈希标记吗?
我正在从twitter搜索结果生成HTML。愉快地使用Net::Twitter模块:-) Twitter中的一条规则是,所有的数字标签都不是链接。 这样就可以毫不含糊地在推特上发布“你不再是我的1”之类的内容,如下所示: 我提出的解决方案如下所示:Regex 不是在perl中自动链接所有数字twitter哈希标记吗?,regex,perl,twitter,Regex,Perl,Twitter,我正在从twitter搜索结果生成HTML。愉快地使用Net::Twitter模块:-) Twitter中的一条规则是,所有的数字标签都不是链接。 这样就可以毫不含糊地在推特上发布“你不再是我的1”之类的内容,如下所示: 我提出的解决方案如下所示: $tweet =~ s{#([0-9]*[A-Za-z_]+[0-9]*)}{<a href="http://twitter.com/search?q=%23$1">#$1</a>}g; $tweet=~s{{#([0-9]
$tweet =~ s{#([0-9]*[A-Za-z_]+[0-9]*)}{<a href="http://twitter.com/search?q=%23$1">#$1</a>}g;
$tweet=~s{{#([0-9]*[A-Za-z}+[0-9]*]){}g;
这似乎有效(希望如此),但我还是很好奇。。。你会怎么做
编辑:我之前提到的正则表达式是不正确的!
请参见下面的更好答案:-)您的regexp不会捕获包含多个由数字分隔的字母的锚,例如#a0a:
my@anchors=($tweet=~m/#(\w+)/g);
foreach我的$anchor(@anchors)
{
下一步除非$anchor=~m/[a-z]/i;
$tweet=~s{#$anchor}{}g;
}
例如,考虑<代码>我的Twitter =“你好,你好,123,你好,ABC1A你好你好,A0A”;<代码>
您的代码生成hello#123 hello a hello a
我的推特会产生
hello#123 hello hello
我不知道推特文本有多复杂!
我在Ruby库中找到了这些与hashtag相关的行,该库在那篇博客文章中链接。我对Ruby了解不多--可能还有更多
# Latin accented characters (subtracted 0xD7 from the range, it's a confusable multiplication sign. Looks like "x")
LATIN_ACCENTS = [(0xc0..0xd6).to_a, (0xd8..0xf6).to_a, (0xf8..0xff).to_a].flatten.pack('U*').freeze
REGEXEN[:latin_accents] = /[#{LATIN_ACCENTS}]+/o
# Characters considered valid in a hashtag but not at the beginning, where only a-z and 0-9 are valid.
HASHTAG_CHARACTERS = /[a-z0-9_#{LATIN_ACCENTS}]/io
REGEXEN[:auto_link_hashtags] = /(^|[^0-9A-Z&\/]+)(#|#)([0-9A-Z_]*[A-Z_]+#{HASHTAG_CHARACTERS}*)/io
我看不出单独处理“拉丁口音”的理由。如果配置正确,\w快捷方式应捕获所有重音字符。也许在Ruby中是不同的。。。也许他们还有其他原因
现在,我正在接受这样的事情
$tweet =~ s{#([0-9A-Z_]*[A-Z_]+\w+)}{<a href="http://twitter.com/search?q=%23$1">#$1</a>}gi
$tweet=~s{{}([0-9A-Z}]*[A-Z}+\w+}{}gi
不能说问题已经解决了…哦。哦,孩子。您正在尝试使用正则表达式解析HTML吗?:大野,他不是。他试图用正则表达式定位散列标签,然后用HTML链接替换它们,以搜索任何定位的散列标签。插入HTML,而不是解析它。
$tweet =~ s{#([0-9A-Z_]*[A-Z_]+\w+)}{<a href="http://twitter.com/search?q=%23$1">#$1</a>}gi