我遇到了一个奇怪的问题(可能以前见过但从未关注过)。
以下是代码要点:
my $url = 'http://twitter.com/' . $handle;
my $page = get($url);
if($page =~ m/Web<\/span>\s*<a href=\"(.+?)\"/gi) {
$website = $1;
}
if($page =~ m/follower_count\" class=\"stats_count numeric\">(.+?)\s*</g) {
$num_followers = $1;
}
它获取Twitter网址并进行一些正则表达式以捕获用户的关注者数量和网站。此代码实际上可以正常工作。但是,当您切换顺序并在搜索关注者之后搜索网站时,网站将为空。事实证明,当您对字符串进行正则表达式时,它似乎会保存最后匹配位置的位置。在HTML中,关注者数显示在网站显示之后。如果您首先执行关注者计数正则表达式,则就像它重新启动了网站正则表达式,其中关注者计数停止(就像字符串的索引引用)。让我感到困惑的是,我在末尾有"g"运算符,表示“全局”,即“从开头全局搜索字符串”。我错过了什么吗?我似乎无法弄清楚为什么它会恢复字符串上的最后一个正则表达式位置(如果这有意义)。
s///g
进行全局替换,而s///
只进行单个替换。m
:m(pattern)
或m[pattern]
或类似的情况。