Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 不是在perl中自动链接所有数字twitter哈希标记吗?_Regex_Perl_Twitter - Fatal编程技术网

Regex 不是在perl中自动链接所有数字twitter哈希标记吗?

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]

我正在从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]*[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