正则表达式问题

软件和网站开发以及相关技术探讨
回复
me
帖子: 972
注册时间: 2007-09-14 19:51

正则表达式问题

#1

帖子 me » 2009-06-28 9:21

有类似如下两种格式的文本

代码: 全选

1234          123456
              123456
用下面两个的正则表达式可以区别两种情况,并保存数据:

代码: 全选

my $n;
my $hash;
 if(/^(\d{4})\s+(\d{6})$/){
    $n=$1;
    push @hash{$n}, $2;
}elsif(/^\s+(\d{6})$){
    push @hash{$n},$1;
}
有没有办法用一条正则表达式实现上面的功能?
谢谢帮助!
宪法 写了:第三十五条 中华人民共和国公民有言论、出版、集会、结社、囗囗、示威的自由。
以上内容完全是复制粘贴,请自行跨省追捕原作者,谢谢!
chpn
帖子: 415
注册时间: 2007-02-28 11:33

Re: 正则表达式问题

#2

帖子 chpn » 2009-06-28 9:47

/^(\d{4}){0,1}\s+(\d{6})$/
me
帖子: 972
注册时间: 2007-09-14 19:51

Re: 正则表达式问题

#3

帖子 me » 2009-06-28 9:56

chpn 写了:/^(\d{4}){0,1}\s+(\d{6})$/
谢谢
宪法 写了:第三十五条 中华人民共和国公民有言论、出版、集会、结社、囗囗、示威的自由。
以上内容完全是复制粘贴,请自行跨省追捕原作者,谢谢!
cheeselee
帖子: 353
注册时间: 2008-07-09 0:39

Re: 正则表达式问题

#4

帖子 cheeselee » 2009-06-28 10:16

这句LZ弄错了:

代码: 全选

push @hash{$n}, $2;
依我理解LZ的意思,应该这样:

代码: 全选

my $hash;......;push @{$hash->{$n}},$2;
或者

代码: 全选

my %hash;.....;push @{$hash{$n}},$2;
要用一句正则表达式的话,可以这样:

代码: 全选

/^(\d{4})?\s+(\d{6})$/
7号机-----神舟 优雅A460P-i7G D2
CPU: i7-2670QM
RAM: 8G
HD:500G
OS:Fedora 17 x86_64

热衷话题:Package Management\Programming
回复