2012-10-03 20 views
0

鑑於以下文本格式,如何在括號之間獲取「用戶編號」值?格式相同,但括號內的值從文件到文件不同。Perl:在已知位置解析未知值

User name [michael] 
User age [25] 
User number [2432] 
User city [Memphis] 
+0

my user_number = $ file_as_string =〜/用戶號碼\ [(\ d +)\] /;我希望這會返回'用戶號碼[2432]',但它返回一個長整數,並弄亂$ file_as_string。第一次使用Perl,我正在編輯另一個人的腳本,所以我確信這很簡單,我只是犯了一個初學者的錯誤。 –

+0

這實際上很接近。你只是忘了包含'['和']'(看我的答案)。正則表達式匹配每個字符,並且您的正則表達式告訴正則表達式引擎它在「用戶編號」之後的空格之後期望數字**右**。 –

回答

1

解決方案1:捕獲的值

my ($number) = $file_as_string =~ /User number \[(\d+)\]/; 

正則表達式匹配的回報僅在列表環境(這就是爲什麼my (...),而不是僅僅my ...

解決方案2:

my $number; 
$file_as_string =~ /User number \[(\d+)\]/ 
    and $number = $1; 

它還保存在特殊變量$ 1,$ 2等中捕獲,但要小心:如果匹配不成功,則從先前的成功中剩下1美元的值完全匹配可能潛入您的變量(因此and - $ number將undef除非字符串匹配)。

0

只提取用戶數,你可以這樣做:

/User number \[(\d*)\]/ 

現在數量將第一個捕獲組(由括號()定義)中找到。因爲它們是正則表達式中的特殊字符,表示字符類,所以轉義[]非常重要。