我正在使用curl將網站存儲爲變量$ mystring。我將如何返回以「810」開頭的每個8位數字?Perl:返回所有正則表達式的實例
我目前有:
#!/usr/local/bin/perl
my $curl = `curl ...`;
$curl =~ /(810\d+)/;
print "$1\n";
除了這僅返回第一個實例。我將如何返回所有實例並將其存儲在數組中?
我正在使用curl將網站存儲爲變量$ mystring。我將如何返回以「810」開頭的每個8位數字?Perl:返回所有正則表達式的實例
我目前有:
#!/usr/local/bin/perl
my $curl = `curl ...`;
$curl =~ /(810\d+)/;
print "$1\n";
除了這僅返回第一個實例。我將如何返回所有實例並將其存儲在數組中?
您需要使用全局修飾符/g
來捕獲所有匹配。
要搜索以810開頭的8位數字,請使用\b
來匹配單詞邊界,並指定要使用大括號搜索的位數; \d{5}
匹配5位數字。
要存儲的比賽在一個數組,你可以做到以下幾點:
my @numbers = ($curl =~ /\b810\d{5}\b/g);
使用/g
修改在while
循環:
my @numbers;
while ($curl =~ /(810\d{5})/g) {
push @numbers, $1;
}
print "@numbers\n";
爲了找到8位數字,搜索前綴後有5位數字。此外,如果您不想匹配較大數字的部分,請檢查單詞界限(\b
),或者查看非數字前後的內容。
使用/g
Modifier。
注意,如果你不是一個正則表達式的專家,一個可能的解決方案是拉出來的所有號碼,然後過濾掉你不希望像這樣的:
#!/usr/bin/env perl
use strict;
use warnings;
my $curl = do {local $/; <DATA>};
my @nums = grep {length == 8 && /^810/} $curl =~ /\d+/g;
print $_, "\n" for @nums;
__DATA__
Hello world
1 # Too_short
134 # Too_short
123456789 # Too_long
81# Pass Too_long Pass
81098765 81098765 181098765 # Pass Test_repeat Too_long_with_substring
輸出:
my @nums = $curl =~ /(?<!\d)(810\d{5})(?!\d)/g;
:
81
81011111
81098765
81098765
然而,同樣可以在過程的單個正則表達式來完成