[问题]一道Perl关于正则表达式的习题.
-
- 帖子: 2
- 注册时间: 2007-04-12 14:48
[问题]一道Perl关于正则表达式的习题.
写一个程序,输出有一个字母大写,而非所有字母都大写的行。它能匹配Fred,而不匹配 fred和 FRED吗?
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 60
- 注册时间: 2006-05-01 12:29
- 来自: zju
#!/usr/bin/perl
use strict;
use warnings;
open my $file, "<", "data" or die "fail to open $!";
while (<$file>) {
my $match = () = m/([A-Z])/g;
print if ( $match == 1 );
}
kernel@fairland:~/perl$ cat data
fred
Fred
FRED
paul
囗囗囗囗
囗囗囗囗
运行结果
kernel@fairland:~/perl$ ./first
Fred
囗囗囗囗
最关键的就是这一行
my $match = () = m/([A-Z])/g;
在列表上下文中m/([A-Z])/g返回所有匹配的大写字母
()仅仅是用于提供一个空的列表环境
在标量上下文my $match中,数组()返回的是数组中元素的数目$#+1
所以这一句的作用就是用于计算一行中大写字母的数目
写的清晰一点就是
my @matched = $_ =~ m/([A-Z)/g;
my $number = @matched;
use strict;
use warnings;
open my $file, "<", "data" or die "fail to open $!";
while (<$file>) {
my $match = () = m/([A-Z])/g;
print if ( $match == 1 );
}
kernel@fairland:~/perl$ cat data
fred
Fred
FRED
paul
囗囗囗囗
囗囗囗囗
运行结果
kernel@fairland:~/perl$ ./first
Fred
囗囗囗囗
最关键的就是这一行
my $match = () = m/([A-Z])/g;
在列表上下文中m/([A-Z])/g返回所有匹配的大写字母
()仅仅是用于提供一个空的列表环境
在标量上下文my $match中,数组()返回的是数组中元素的数目$#+1
所以这一句的作用就是用于计算一行中大写字母的数目
写的清晰一点就是
my @matched = $_ =~ m/([A-Z)/g;
my $number = @matched;
-
- 帖子: 2
- 注册时间: 2007-04-12 14:48
说的太好了,很详细,谢谢了heejun 写了:#!/usr/bin/perl
use strict;
use warnings;
open my $file, "<", "data" or die "fail to open $!";
while (<$file>) {
my $match = () = m/([A-Z])/g;
print if ( $match == 1 );
}
kernel@fairland:~/perl$ cat data
fred
Fred
FRED
paul
囗囗囗囗
囗囗囗囗
运行结果
kernel@fairland:~/perl$ ./first
Fred
囗囗囗囗
最关键的就是这一行
my $match = () = m/([A-Z])/g;
在列表上下文中m/([A-Z])/g返回所有匹配的大写字母
()仅仅是用于提供一个空的列表环境
在标量上下文my $match中,数组()返回的是数组中元素的数目$#+1
所以这一句的作用就是用于计算一行中大写字母的数目
写的清晰一点就是
my @matched = $_ =~ m/([A-Z)/g;
my $number = @matched;