求一个正则表达式!

求一个正则表达式!

有如下文本:
selectTag_jumpproduct.options.add(new Option(" 2000","8553"));
selectTag_jumpproduct.options.add(new Option(" 366C","8539"));
selectTag_jumpproduct.options.add(new Option(" 368C","8540"));
selectTag_jumpproduct.options.add(new Option(" A1010","105736"));
selectTag_jumpproduct.options.add(new Option(" RAZR2 V8(2G)黄金版","215644"));
selectTag_jumpproduct.options.add(new Option(" RAZR maxx V1100","184882"));
如何用Perl写一个正则表达式得到2000,8553并把8553做为键,2000做为值放入一个哈席表里(hash)依次类推^^^
取引号里的内容就可以了。
my ($value, $key) = /"(.*?)".*"(.*?)"/;
$hash{$key} = $value;
- - ~~

我记得上次你问过一个 呵呵   似乎是 什么 sever 19   0|0|0  这个

自己看吧 这个问题挺简单  我这么笨的人看了不到一个星期小骆驼 都能编写小小处理字符串的脚本
相信你也能
#!/usr/bin/perl -w
use strict;
use warnings;

my $key;
my %model;
my @match;
my $type;
my $fileName = 'Motorola.txt';
eval {
     open(FN, $fileName) or die "Can't open the file: $!";
     while(<FN>) {
           my $info = $_;
           chomp($info);
           my($value,$mykey) = /"(.*?)".*"(.*?)"/;
           $model{$mykey} = $value;
     }
};
if($@) {
   print "An error occurred($@),continuing\n";
}
#%model = ('58533' => 'MPx100', '58538' => 'MPx220', '8558' => 'P7389i');

foreach $key (sort keys(%model)) {
          eval {
           system("wget http://product.pconline.com.cn/mobile/motorola/$key\_detail.html");
           open(FH, "$key\_detail.html") or die "Can't open the file: $!";
           while(<FH>) {
                my $info = $_;
                chomp($info);
                if($info =~ /SyncML/) {
                   $type = $model{$key};
                   push(@match, $type);
                }
           }
          };
          if($@) {
             print "An error occurred($@),continuing\n";
          }
}

print "@match\n"
~
请问在这里用 eval 有什么作用?
利用eval 捕获错误
有时,你程序中某段普通代码可能引起严重错误(fatal errors)。例如,下面这些均能让你的程序崩溃:
$barney = $fred / $dino; #除数为0 的错误?
print “match\n”if /^($wilma)/; #非法的正则表达式的错误?
open CAVEMAN, fred #用户产生的错误?
or die “Can’t open file ‘$fred’for input: $!”;
如果不怕麻烦,可以捕捉到一些这种类型的错误,但很难考虑周全。(你怎样检测上例中的$wilma 字符串,以保证它是一
个合法的正则表达式呢?)庆幸的是,Perl 提供了处理严重错误的方法:将这些代码放入eval 块中:
eval { $barney = $fred / $dino };
甚至当$dino 为0 时,上述代码也不会让程序崩溃。eval 是一个表达式(不是像while 或foreach 那样的控制结构),因此结
尾处的分号是必须的。
当执行eval 块时发生了通常的严重错误,eval 块会停止执行,但程序不会崩溃。当eval 结束时,你想知道它是正常结束的,
还是发生了严重错误。这些结果放在特殊变量$@之中。如果eval 为你捕捉了严重错误,则$@中将有程序失败的原因,可
能如:Illegal division by zero at my_program line 12。如果没有错误,则$@为空。这意味着$@是一个有用的Boolean(true/false)
值(真,表示有错误),因此可能在eval 块后看到如下的代码:
print “An error occurred: $@”if $@;
eval 块是真正的一个块,因此其中可以有新的局部(my)变量。下面的程序演示了一个eval 块:
Perl 语言入门(第四版)
blei@163.com 192 / 201 9/21/2006
foreach my $person (qw/ fred wilma betty barney dino pebbles /) {
eval {
open FILE, “<$person”
or die “Can’t open file ‘$person’: $!”;
my($total, $count);
while (<FILE>){
$total += $_;
$count++;
}
my $average = $total/$count;
print “Average for file $person was $average\n”;
&do_something($person, $average);
};
if ($@){
print “An error occurred ($@), continuing\n”;
}
}
这里捕捉了多少严重错误呢?如果打开文件时出了一个错误,这个错误则被捕捉。计算平均数时,除数可能为0,这个错
误也将被捕捉。甚至&do_something 这个子程序,由于其也在eval 块之内,同样受到eval 的保护,eval 块会捕捉任何在其
运行期间的严重错误。(这个功能是非常方便的,如果调用别人的程序,但你不知道这些代码是否足够强壮,这样能避免让
你的程序崩溃。)
当处理某个文件时出现了错误,我们得到这个错误信息,但程序不会因此停下来,会继续处理下一个文件。
可以将eval 块进行嵌套。内层捕捉它运行时候的错误(当内层的eval 结束时,你可能希望使用die 将这些错误在输出来,
因此外层的eval 可以捕捉它。)一个eval 块捕捉任何它运行时发生的错误,包括其调用的子程序的错误(如前面的例子。)
eval 是一个表达式,这就是为什么需要结尾的分号来关闭花括号的原因。由于是一个表达式,则有一个返回值。如果没有
错误,就像任何的子程序一样:返回值为最后一个被求值的表达式的值,或者是由return 返回的值。下面是另一种进行这
种数学运算而不担心除数是否为0 的做法:
my $barney = eval { $fred / $dino };
如果eval 捕捉到了严重错误,则返回值为undef 或空列表,依赖于其context。因此,在前面的例子中,$barney 为除法运算
的正确值,或者是undef。我们不需要在继续使用之前检测$@,虽然之前进行检测defined ($barney)是一个好主意。
有四种类型的问题不能由eval 捕捉。第一种是严重到可以让Perl 崩溃的错误,如内存耗光。由于Perl 没有运行,它不能捕
捉这些错误◆。eval 块中的语法错误会在编译时被发现,因此它们也不会出现在$@之中。
Perl 语言入门(第四版)
blei@163.com 193 / 201 9/21/2006
◆某些这种类型的错误在perldiag 的用户手册中被标记有(X),如果你感兴趣的话。
exit 会立刻终止一个程序的运行,即便是在eval 块内的子程序中调用的。这明确暗示了,当写子程序时,应当使用die 而非
exit 来表示程序出了问题。
第四个不能由eval 块捕捉的问题是warnings:无论是用户产生的(从warn 中)或者Perl 内部产生的(在命令行中使用-w 参
数,或者使用use warnings pragma)。eval 中有一种分离出来的机制来捕捉warnings。查看Perl 文档中关于_ _ WARN_ _的
论述。
eval 还有一种形式,如果错误使用将非常危险。有时,你可能遇到某人告诉你在代码中使用eval 可能引起安全问题,因此
不要使用它。他们(基本上)是对的,使用eval 时应当非常小心,但他们说的是另一种形式的eval,有时被称作“eval of string.”
如果关键字后面紧接着的是花括号括起来的代码块,如我们这里的,则没有必要担心eval 的安全问题。
没事干别用 eval。
多谢这么详细的讲解.