【发布时间】:2012-03-10 14:02:27
【问题描述】:
我想在 perl 中使用正则表达式查找第 n 次出现的数字或字符。
例如:如果字符串是:
$string = 'abdg2jj4jdh5jfj6'
我需要匹配第 3 个数字 5。
我该如何使用正则表达式。
【问题讨论】:
我想在 perl 中使用正则表达式查找第 n 次出现的数字或字符。
例如:如果字符串是:
$string = 'abdg2jj4jdh5jfj6'
我需要匹配第 3 个数字 5。
我该如何使用正则表达式。
【问题讨论】:
my $string = "abdg2jj4jdh5jfj6";
my @myArray = ($string =~ /(\d)/g);
print "$myArray[2]\n";
输出:
5
【讨论】:
my $nth = ($string =~ /(\d)/g)[2]
Brian Roachs 答案的替代方法是使用这样的捕获组
$string =~ /^\D*\d\D*\d\D*(\d)/;
print $1;
表示从字符串的开头匹配 0 个或多个非数字 (\D) 然后是一个数字 (\d),再次相同,然后是括号中您想要的数字,因此它将被存储在$1。
但是您需要更长的正则表达式,所以我更喜欢他的解决方案 (+1)。
【讨论】:
my $k = 2; # one less than N
my ($digit) = $string =~ /(?:\d.*?){$k}(\d)/;
【讨论】:
我可以说“你不需要正则表达式”吗?
您可以使用substr() 来完成。
【讨论】:
5 是“第三位数字”的方式。 substr() 无法做到这一点