perl正则匹配疑难杂症,求问

pyruby 发布于 2013/08/25 15:10
阅读 205
收藏 0

问题1:

如下代码:

#!/usr/bin/perl
use warnings;
use strict;
use feature 'say';

my $a = "reading a book";
if($a =~ /(?<=\bre)\w+\b/) {
	my $id = $1;
	say $id;
}

上面代码,根据我对零宽度正回顾后发断言的理解,$id应该是ading,但是实际这段代码会提示Use of uninitialized value $id in say at 1.pl。我不太理解。。。

问题2:

如下代码:

#!/usr/bin/perl
use warnings;
use strict;
use feature 'say';

my $a = "I'm singing while you're dancing";
if($a =~ /(\b\w+(?=ing))/) {
	say $1;
}
上面代码正则叫做 零宽度正预测先行断言,应该匹配到的是sing和danc,我想得到这两个值,但是$1仅仅是sing,如何写代码,才能得到这两个匹配的值?
加载中
0
kiwivip
kiwivip
while(/.../g){...}
0
pyruby
pyruby

问题1知道了,我了个去,少了个括号,应该把$a =~ /(?<=\bre)\w+\b/改成

$a =~ /((?<=\bre)\w+\b)/

0
pyruby
pyruby

引用来自“yak”的答案

$&
不行哎。。怎么写哦??
0
pyruby
pyruby

引用来自“kiwivip”的答案

while(/.../g){...}
嗯 3q
0
yak
yak

引用来自“宝仔love”的答案

引用来自“yak”的答案

$&
不行哎。。怎么写哦??
use warnings;
	use strict;
	use feature 'say';
	 
	my $a = "reading a book";
	if($a =~ /(?<=\bre)\w+\b/) {
	    say  $&;
	}
 
		 
	  $a = "I'm singing while you're dancing";
	while($a =~ /(\b\w+(?=ing))/g) {
	    say $&;
	}

返回顶部
顶部