2017-02-09 22 views
-5

我有一個字符串,其值爲Validation_File_2_3.45.2017.csvPerl正則表達式檢索第一個數字

如何在這種情況下使用正則表達式提取第一個數字是2?

我試圖表達($Filedigit) = ($Filename =~ m/^[0-9]/g),但它沒有工作

+4

你有什麼試過?數字和非數字的轉義字符是什麼?你如何在正則表達式中捕獲一個值? – AntonH

+0

您好,我已經嘗試了表達式($ Filedigit)=($ Filename =〜m/^ [0-9]/g); –

+0

@GauraviNaik:好的,當你嘗試時會發生什麼?爲什麼你讓我們努力工作以獲取我們需要回答的信息?你也應該*編輯*你的問題來添加信息,而不是寫在評論中。這次我爲你做了,但我們仍然需要知道你有什麼問題。 – Borodin

回答

0

在評論,你說你想這:

($Filedigit)= ($Filename =~ m/^[0-9]/g); 

幾件事情。你應該總是檢查一場比賽是否成功,然後繼續你的腳本,特別是當試圖捕獲。接下來,^從字符串的開頭看,然後立即在全局中查找單個數字0-9。這不匹配,除非你有一個文件名,如2_blah.csv。但是,您實際上並未嘗試捕獲任何內容,因此如果碰巧與某個條目匹配,則在所有情況下$Filedigit將爲1(表示發生匹配)。

這裏有一個例子,你想要做什麼:

use warnings; 
use strict; 

my $str = 'Validation_File_2_3.45.2017.csv'; 

# confirm there's a match 

if (my ($num) = $str =~ /^.*?(\d+)/){ 
    print "$num\n"; 
} 
else { 
    print "no match\n"; 
} 

正則表達式的說明:

^ - start from beginning of string 
.*? - anything, non-greedy 
( - begin capture 
\d+ - any number of contiguous digit chars 
) - end capture 

所以,從字符串的開頭開始,拋出第一套前走什麼連續的數字並捕獲它們並將其放入變量中。

請參閱perlreftutperlre