例如,我有一個包含Perl命令行單行查找跨越多行的正則表達式匹配?
abc
bcc
ccc
baa
文件foo.txt
,我想返回的「C:\ NB」(所有實例的指標在這種情況下,串到起始於第三個發現文件的第十一個字符)。完成這個最簡單的方法是什麼?
例如,我有一個包含Perl命令行單行查找跨越多行的正則表達式匹配?
abc
bcc
ccc
baa
文件foo.txt
,我想返回的「C:\ NB」(所有實例的指標在這種情況下,串到起始於第三個發現文件的第十一個字符)。完成這個最簡單的方法是什麼?
如果你確定該文件是足夠小以適應舒適的內存,你可以將它變成一個變量並應用正則表達式:
$ perl -0777 -ne 'print $-[0], "\n" while /c\nb/g' foo.txt
否則:
$ perl -ne 'print $n - 2, "\n" if /^b/ && $last =~ /c$/; $last = $_; $n += length' foo.txt
注意,這些解決方案依賴於只包含ASCII字符的輸入文件。
#!/usr/bin/perl
my $s = 'abc
bcc
ccc
baa';
while ($s =~ /c\nb/mg) {
print pos($s), "\n"
}
這將輸出5,13(pos
函數返回比賽結束的指標,但你應該能夠彌補這一點)。
我敢肯定有一個像樣的正則表達式的解決了這個,但我會退到舊index
功能:
$_ = q[abc
bcc
ccc
baa];
my $z; print $z++,"\n" while 0<=($z=index($_,"c\nb",$z));
2
10
從命令行怎麼樣? – jonderry 2011-01-13 20:37:52