2012-02-20 75 views

回答

11
my $string = "abdg2jj4jdh5jfj6"; 
my @myArray = ($string =~ /(\d)/g); 
print "$myArray[2]\n"; 

輸出:

+0

感謝Brian,它的工作原理。 – kailash19 2012-02-20 07:54:23

+3

沒有過渡變量:'我的$ nth =($ string =〜/(\ d)/ g)[2]' – TLP 2012-02-20 08:02:45

+1

@TLP - 是的 - 我打算去那裏,但我希望它更明顯發生了什麼事。它還具有隻需運行一次正則表達式即可獲得任何數字的好處。 – 2012-02-20 08:03:52

3

布萊恩Roachs答案的替代方案將是使用捕獲組這樣

$string =~ /^\D*\d\D*\d\D*(\d)/; 
print $1; 

是指從開始比賽字符串0或更多非數字(\D)然後一個數字(\d),再次相同,然後是括號中的數字,因此它將存儲在$1中。

但是你需要更長的正則表達式,所以我寧願他的解決方案(+1)。

1
my $k = 2; # one less than N 
my ($digit) = $string =~ /(?:\d.*?){$k}(\d)/; 
0

我可以說「你不需要一個正則表達式」嗎?

您可以使用substr()

+0

他想要在字符串中找到第n個*號*。這就是'5'是「第3位」的方式。你不能用'substr()' – 2012-02-20 16:58:52

+0

對不起。我沒有正確閱讀,你是對的。 – AmbroseChapel 2012-02-21 23:08:20

相關問題