我有一些代碼抓住一些文本之間的「之間」; 具體而言,在foo $someword
和接下來的foo $someword
之間。爲什麼我的Perl正則表達式導致無限循環?
然而,它會卡在第一個「之間」,不知怎的,內部字符串位置不會增加。
輸入數據是一個帶有換行符的文本文件:它們非常不相關,但使打印更容易。
my $component = qr'foo (\w+?)\s*?{';
while($text =~ /$component/sg)
{
push @baz, $1; #grab the $someword
}
my $list = join("|", @baz);
my $re = qr/$list/; #create a list of $somewords
#Try to grab everything between the foo $somewords;
# or if there's no $foo someword, grab what's left.
while($text=~/($re)(.+?)foo ($re|\z|\Z)/ms)
#if I take out s, it doesn't repeat, but nothing gets grabbed.
{
# print pos($text), "\n"; #this is undef...that's a clue I'm certain.
print $1, ":", $2; #prints the someword and what was grabbed.
print "\n", '-' x 20, "\n";
}
難道你不希望有一個「/ g「修飾符在第二個循環中也是? – jrockway 2009-08-18 22:01:39
\ z和\ Z沒有必要,\ Z包含\ z – 2009-08-18 22:11:24
我正在遍歷文本,而不是抓取數組(這是什麼/ g會返回)。但是,/ g不會影響最終輸出問題。我試過了。 :-) – 2009-08-18 22:11:43