我想在perl中使用正则表达式找到数字或字符的第n个出现。
例如:如果字符串是:
$string = 'abdg2jj4jdh5jfj6'
我需要匹配第3位的数字5。
我怎样才能使用正则表达式。
答案 0 :(得分:11)
my $string = "abdg2jj4jdh5jfj6";
my @myArray = ($string =~ /(\d)/g);
print "$myArray[2]\n";
输出:
5
答案 1 :(得分:3)
Brian Roachs回答的替代方案是使用像这样的捕获组
$string =~ /^\D*\d\D*\d\D*(\d)/;
print $1;
表示从字符串的开头匹配0个或更多个非数字(\D
),然后是数字(\d
),再次相同,然后是你想要在括号中的数字,所以它将存储在$1
。
但是你需要更长的正则表达式,所以我更喜欢他的解决方案(+1)。
答案 2 :(得分:1)
my $k = 2; # one less than N
my ($digit) = $string =~ /(?:\d.*?){$k}(\d)/;
答案 3 :(得分:0)
我可以说“你不需要正则表达式”吗?
您可以使用substr()
。