3/08/2009


在Perl中利用正则表达式(Regex)在字符串中获取信息的一个技巧

首先我们要知道一个基本知识,在Perl中我们可以用$1,$2,$3获取在字符串中第一个圆括号,第二个圆括号和第三个圆括号中的内容,以此类推。比如:

$example = "this is an example";
$example =~ /(\w+)W+(\w+)W+(\w+)W+(\w+)/;

这里$1,$2,$3和$4就分别获值为"this","is","an"及"example"。

下面回到正题,设想有这样一个问题,比如有这样一个链接(偷懒一下直接拷贝):
http://www.blogger.com/post-edit.g?blogID=259409908328568382&postID=6183172999248333738
我们想要获得blogID和postID怎么办?当然可以用上面的办法分别把blogID和postID赋值给$1和$2然后再处理。但是我们还有更好的方法:

$link = "http://www.blogger.com/post-edit.g?blogID=259409908328568382&postID=6183172999248333738";
($blogID, $postID) = $link =~ /\?blogID=(\d+)&postID=(\d+)$/;

这样一下程序就更简洁,可读性也大大提高。

还有一点要注意,如果我们只需要上例中的postID,可以这样写:

($postID) = $link =~ /postID=(\d+)$/;

$postID外面的圆括号一定不要忘记,否则我们就不能获得正确的数值。试想一下,如果不加$postID外面的圆括号会有什么结果?

$postID = $link =~ /postID=(\d+)$/;

(答案见评论)

1 comment: