perl中regex匹配出一满足条件的结果即终止?

perl中regex匹配出一满足条件的结果即终止?

perl中regex匹配出一满足条件的结果即终止?
作者提供的相关的附件(大小:1 K)

作者提供的相关的附件(大小:1 K)

我想从一个文件文件中取出每行里的数字,比如在sample.txt中有如下内容:
aa123bb456cc789dd
asd555asdf89asdf1.25asdf
==-1.25asdf568[[[

我想匹配出来的是每行中的数字:
123 456 789
555 89 1.25
-1.25 568

现在我用的正则是 /-? \d+ \.? \d*/x
它可以提取出我想要的字串,但有一个问题:
它只能匹配出每行的第一个数字,匹配得到第一个后就不再管后面的可以匹配上的数字了。

我想问的问题是:有没有办法能够匹配出所有的数字?

我的源代码如下(或参附件):
#!/usr/bin/perl
use strict;
use warnings;
open (FI,"sample.txt");
while (<FI>) {
chomp;
if (/-? \d+ \.? \d*/x) {
print "Matched: |$`<$&>$'|\n";
}else{
print "No matched: |$_|\n";
}
}

输出结果如下:
Matched: |aa<123>bb456cc789dd|
Matched: |asd<555>asdf89asdf1.25asdf|
Matched: |==<-1.25>asdf568[[[|
尖括号内的数字即匹配得到的数字。




   

在你的基础上改了下--[q.
在你的基础上改了下
[quote]
#!/usr/bin/perl
use strict;
use warnings;
open (FI,"sample.txt");
while (<FI>) {
chomp;
my $matched = 0;
my $end = "";
while(/-? \d+ \.? \d*/xg) {
print "Matched: |" unless $matched;
$matched = 1;
print "$`<$&>";
$_ = $';
$end = $';
}
$matched ? print "$end|\n" : print "No matched: |$_|\n" ;
}
[/quote]
谢谢!
谢谢![CCB]1[/CCB]很好用。
不过还有点疑问:正则/-? \d+ \.? \d*/xg中末尾那个g好像不是必需的,因为我把它去掉后仍能得到正确的结果。在匹配时有g选项么?我好像只在替换时s///g见过g选项。我是从小骆驼书上看的,没提到匹配时可用g,其他书讲过匹配中有g么?(我也试过用m//g去匹配字串中所有数字,好像不work)谢谢!!!